pageContext.request.userPrincipal 是不是存储在会话中?我也可以得到密码吗?
Posted
技术标签:
【中文标题】pageContext.request.userPrincipal 是不是存储在会话中?我也可以得到密码吗?【英文标题】:Is pageContext.request.userPrincipal stored in session? Can I get password too?pageContext.request.userPrincipal 是否存储在会话中?我也可以得到密码吗? 【发布时间】:2016-05-16 14:40:24 【问题描述】:我正在学习 Spring 安全性,据我了解,使用 request.getUserPrincipal()
我们可以访问 name,我们可以使用 pageContext.request.userPrincipal.name
获取名称,
这是我的代码(一切正常):
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@page session="true"%>
<html>
<body>
<h5>Title : $title</h5>
<h5>Message : $message</h5>
<c:if test="$pageContext.request.userPrincipal.name != null">
<h2>Hi User : $pageContext.request.userPrincipal.name></h2>
<br>
</c:if>
</body>
</html>
我的问题是:
1)。 pageContext.request.userPrincipal.name
上的这个 name 是从会话中检索到的吗?因为表单顶部有<%@page session="true"%>
2)。是否也可以检索 密码?我的意思是pageContext.request.userPrincipal.password
之类的东西,如果不是,我怎么能在表单中获取密码?
非常感谢你帮助我理解这个框架,因为我没有足够的钱买一些 springs 书籍,我只是在互联网上使用一些教程,所以你的帮助对我来说意义重大.
【问题讨论】:
为什么需要密码? 嗨@BalusC,感谢您的回复,我也在做php,通常我们可以通过 if (pass == _var_from_session ) 手动检查密码(在不良做法/初学者方法中) ,在 java 中,我们可以使用 servlet 或带有支持模型的东西来检查自身,我只是想知道我们是否可以这样做,但可以使用表单来代替。或者我可能在这里误解了 pageContext.request.userPrincipal 的目的 如果密码错误,首先将没有登录用户。 哦,是的,这很有道理(我的思想开始开放),非常感谢@BalusC 【参考方案1】:pageContext.request.userPrincipal.name 上的这个名字是从会话中检索到的吗?
不,它是从 request
检索的,而不是从 session
检索的。然而,在幕后,安全框架可能会将内部标识符存储在 HTTP 会话中。但这应该是您最不关心的问题。
顺便说一下,检索主体名称的方法更短。
$pageContext.request.remoteUser
另见 a.o. How to get login attributes from a servlet/jsp.
因为表单顶部有
这有不同的含义,并且已经是默认值。默认情况下,当打开 JSP 时,如果尚未创建 HTTP 会话,它将隐式创建。这在设计为无状态的页面中可能是不可取的。然后开发人员将使用<%@page session="false"%>
关闭隐式会话创建并将其留给servlet 代码。另见 a.o. Can I turn off the HttpSession in web.xml?
还能找回密码吗?我的意思是 pageContext.request.userPrincipal.password 之类的东西,如果不是,我怎么能在表单中获取密码?
根据问题的 cmets,我收集到您需要它来验证登录。这是没有意义的。如果登录无效,首先将没有登录用户。
【讨论】:
以上是关于pageContext.request.userPrincipal 是不是存储在会话中?我也可以得到密码吗?的主要内容,如果未能解决你的问题,请参考以下文章