我使用 Spring Security 2.x 已经有一段时间了,但最近我切换到了 3.x。UserDetails
我总是对 DB使用自己的接口和身份验证实现。
一切正常(登录、注销、url 过滤器、查看授权用户的用户名等)。
剩下要做的就是在用户未被授权时显示“请登录”消息。我尝试了几种方法:
<sec:authorize access="not isAnonymous()">
or
<sec:authorize access="hasRole('ROLE_ANONYMOUS')">
etc.
他们都没有工作。最后我添加<sec:authentication property="principal.authorities" />
到我的主页输出来调试用户真正拥有的角色。这就是我所看到的:
- 登录用户 -
[ROLE_USER, ROLE_ADMIN]
- 未经授权的用户 - `` <- 空字符串
如果我没记错的话,看起来我不知何故失去了ROLE_ANONYMOUS
Spring 总是添加的默认权限。是最近掉了还是怎么的?也许我必须以其他方式处理这种匿名访问?
安全上下文的相关部分:
<beans:beans
xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.1.xsd">
<!-- UNPROTECTED RESOURCES -->
<http pattern="/" security="none"/>
<http pattern="/favicon.ico" security="none"/>
<http pattern="/home" security="none"/>
<http pattern="/login*" security="none"/>
<http pattern="/resources/**" security="none"/>
<!-- PROTECTED RESOURCES -->
<http auto-config='true' use-expressions="true">
<intercept-url pattern="/**" access="hasRole('ROLE_USER')"/>
<intercept-url pattern="/admin/**" access="hasRole('ROLE_USER,ROLE_ADMIN')"/>
<form-login login-page="/login" default-target-url="/dashboard" authentication-failure-url="/login?login_error=true"/>
<logout logout-url="/logout"/>
</http>
<beans:bean id="userAccountsAuthenticationProvider" class="pl.xxx.utils.UserAccountsAuthenticationProvider" />
<beans:bean id="saltSource" class="org.springframework.security.authentication.dao.ReflectionSaltSource">
<beans:property name="userPropertyToUse" value="salt" />
</beans:bean>
<authentication-manager>
<authentication-provider user-service-ref="userAccountsAuthenticationProvider">
<password-encoder ref="standardPasswordEncoder"/>
</authentication-provider>
</authentication-manager>
</beans:beans>