公共页面,例如网站的第一页,所有用户都可以访问,包含匿名用户。 所以我在applicationContext-security.xml中配置它,如下所示:
<intercept-url pattern="/index" access="permitAll" />
<intercept-url pattern="/css/**" access="permitAll" />
<intercept-url pattern="/javascript/**" access="permitAll" />
<intercept-url pattern="/**"
access="hasAnyRole('ROLE_MANAGER','ROLE_ORGANIZATION')" />
如果使用signin.I我想使用以下代码获取用户信息:
SecurityContextHolder.getContext()
.getAuthentication().getPrincipal()
即使我已登录,我也会失效。
我认为是配置错误。谁知道为什么或在哪里?感谢
答案 0 :(得分:2)
您的代码没有任何问题。通常在匿名用户的情况下,您的主体将是一个简单的字符串“anonymousUser”。我认为主要的问题是没有调用 AnonymousAuthenticationFilter.doFilter(...)。 AnonymousAuthenticationFilter 负责将匿名身份验证注入SecurityContextHolder。确保HTTP请求与
相关SecurityContextHolder.getContext().getAuthentication().getPrincipal()
调用由Spring Security过滤器链覆盖。在 AnonymousAuthenticationFilter.doFilter()中制作制动点。如果未调用,请检查您的web.xml。确保您的过滤器链适用于所有HTTP调用:
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>