Spring拦截网址配置中的ROLE_USER和ROLE_ANONYMOUS有什么区别,如下例所示?
<http auto-config="false" access-decision-manager-ref="accessDecisionManager"
use-expressions="true">
<intercept-url pattern="/admin/**" access="hasRole('ROLE_ANONYMOUS')"
requires-channel="http" />
<intercept-url pattern="/login/**" access="hasRole('ROLE_ANONYMOUS')"
requires-channel="${application.secureChannel}" />
<intercept-url pattern="/error/**" access="hasRole('ROLE_ANONYMOUS')"
requires-channel="http" />
<intercept-url pattern="/register/**" access="hasRole('ROLE_ANONYMOUS')"
requires-channel="${application.secureChannel}" />
<intercept-url pattern="/" access="hasRole('ROLE_ANONYMOUS')"
requires-channel="http" />
<intercept-url pattern="/**" access="hasRole('ROLE_USER')"
requires-channel="http" />
<form-login login-page="/login" login-processing-url="/login/submit"
authentication-failure-url="/login/error" />
<logout logout-url="/logout" />
</http>
答案 0 :(得分:14)
当配置使用Spring Security的"anonymous authentication" filter 时,ROLE_ANONYMOUS是分配给未经身份验证的(匿名)用户的默认角色。默认情况下启用此选项。但是,如果您使用表达式 isAnonymous(),它可能更清晰,具有相同的含义。
除非您在对用户进行身份验证时将此角色分配给您(您负责为经过身份验证的用户加载角色(权限)),否则ROLE_USER没有任何意义。它不是Spring Security基础架构内置的名称。在给定的示例中,可能是该角色已分配给经过身份验证的用户。
答案 1 :(得分:1)
ROLE_ANONYMOUS没有用户凭据,ROLE_USER具有用户凭据...已经过身份验证。
根据提供的配置,这是我的解释