Spring security 春季安全:校长去了哪里?

Spring security 春季安全:校长去了哪里?,spring-security,principal,Spring Security,Principal,我使用spring安全性已经有一段时间了,由于某种原因,即使身份验证和授权正常工作,我也无法访问JSP中的主体 这是我的index.jsp: <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="sec" uri="http:

我使用spring安全性已经有一段时间了,由于某种原因,即使身份验证和授权正常工作,我也无法访问JSP中的主体

这是我的index.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>

<%@ page import="org.springframework.security.core.context.SecurityContextHolder" %>

<a href="forAuthenticated.jsp">for authenticated</a><br/>
<a href="admin/adminUsers.jsp">for admins</a>

<sec:authorize access="! isAuthenticated()">
    not logged in
</sec:authorize>
<sec:authorize access=" isAuthenticated()">
    logged in
</sec:authorize>

Your principal object is....: <sec:authentication property="principal.username" /><br/>
Authentication = <%=SecurityContextHolder.getContext().getAuthentication() %>

<p><a href="j_spring_security_logout">Logout</a></p>

我错过了什么?我应该怎样加倍-ckeck()?

正如Karthikeyan在他的评论中所建议的,问题在于以下几行:

<http pattern="/index.jsp" security="none"/>

正如Karthikeyan在评论中指出的那样,问题在于以下几点:

<http pattern="/index.jsp" security="none"/>

您的index.jsp没有安全性,请在其他安全页面上尝试。您的index.jsp没有安全性,请在其他安全页面上尝试。是的,就是这样。我曾经认为,一旦经过身份验证,主体就会出现在每个请求中,直到logoutThat正确,因为身份验证对象基本上存储在http会话属性中。
security=“none”
的问题是,它甚至跳过了安全筛选器(
SecurityContextPersistenceFilter
),后者负责通过读取存储的会话属性初始化线程本地
SecurityContextHolder
)。它仍然在那里,但是没有任何东西可以重新加载它。理论上,你甚至可以自己从会话中手动获取它……是的,就是这样。我曾经认为,一旦经过身份验证,主体就会出现在每个请求中,直到logoutThat正确,因为身份验证对象基本上存储在http会话属性中。
security=“none”
的问题是,它甚至跳过了安全筛选器(
SecurityContextPersistenceFilter
),后者负责通过读取存储的会话属性初始化线程本地
SecurityContextHolder
)。它仍然在那里,但是没有任何东西可以重新加载它。理论上,你甚至可以自己从会话中手动获取它。。。
<http pattern="/index.jsp" security="none"/>
<sec:intercept-url pattern="/index.jsp" access="IS_AUTHENTICATED_ANONYMOUSLY"/>