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 是从会话中检索到的吗?因为表单顶部有&lt;%@page session="true"%&gt;

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 会话,它将隐式创建。这在设计为无状态的页面中可能是不可取的。然后开发人员将使用&lt;%@page session="false"%&gt; 关闭隐式会话创建并将其留给servlet 代码。另见 a.o. Can I turn off the HttpSession in web.xml?


还能找回密码吗?我的意思是 pageContext.request.userPrincipal.password 之类的东西,如果不是,我怎么能在表单中获取密码?

根据问题的 cmets,我收集到您需要它来验证登录。这是没有意义的。如果登录无效,首先将没有登录用户。

【讨论】:

以上是关于pageContext.request.userPrincipal 是不是存储在会话中?我也可以得到密码吗?的主要内容,如果未能解决你的问题,请参考以下文章