0

公共页面,如网站首页,所有用户都可以访问,包含匿名用户。所以我在 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')" />

如果使用登录,我想获取用户信息。我使用以下代码:

SecurityContextHolder.getContext()
                .getAuthentication().getPrincipal()

然后即使我有登录,我也会得到空值。

我认为是配置错误。任何人都知道为什么或在哪里?谢谢

4

1 回答 1

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>
于 2013-01-29T09:52:52.073 回答