2

我正在学习 Spring 安全性,据我所知,通过使用request.getUserPrincipal() 我们可以访问该名称,我们可以通过以下方式获取名称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是 从会话中检索到的吗?因为<%@page session="true"%>在表格的顶部

2)。是否也可以找回密码?我的意思是pageContext.request.userPrincipal.password,如果不是,我怎样才能获得表单中的密码?

谢谢你,我非常感谢你帮助我理解这个框架,因为我没有足够的钱买一些弹簧书,我只是在互联网上使用一些教程,所以你的帮助对我来说意义重大。

4

1 回答 1

3

pageContext.request.userPrincipal.name 上的这个名称是从会话中检索到的吗?

不,它是从 中检索的request,而不是从中检索的session。然而,在幕后,安全框架可能会将内部标识符存储在 HTTP 会话中。但这应该是您最不关心的问题。

顺便说一下,检索主体名称的方法更短。

${pageContext.request.remoteUser}

另请参阅 ao如何从 servlet/jsp 获取登录属性


因为表单顶部有 <%@page session="true"%>

这具有不同的含义,并且已经是默认设置。默认情况下,当打开 JSP 时,如果尚未创建 HTTP 会话,它将隐式创建。这在设计为无状态的页面中可能是不可取的。然后,开发人员将使用<%@page session="false"%>来关闭隐式会话创建并将其留给 servlet 代码。另请参阅 ao我可以关闭 web.xml 中的 HttpSession 吗?


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

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

于 2016-02-06T20:19:20.060 回答