Spring Security:Case Insensitive Roles

时间:2014-05-23 15:00:07

标签: spring spring-security

我在基于Spring MVC的Web应用程序中设置了Spring Security。但是由于某些外部系统限制,我希望用户roles为小写。

但是当使用In Memory Users进行本地测试时,只有经过身份验证的用户在UPPER_CASE中具有角色时,应用程序才允许访问,并且在将角色更改为小写后立即给出403。

是否存在仅限大写角色的限制。我在文档中找不到它?

我还发现了lowercase-comparisons的属性filter-invocation-definition-source ..这是用于比较网址还是角色?

以下是FilterSecurityInterceptor定义:

<bean id="fsi" class="org.springframework.security.web.access.intercept.FilterSecurityInterceptor">
    <property name="authenticationManager" ref="authenticationManager" />
    <property name="accessDecisionManager" ref="accessDecisionManager" />
    <property name="objectDefinitionSource">
        <sec:filter-invocation-definition-source lowercase-comparisons="true">
            <sec:intercept-url pattern="/logout.jsp"            access="ROLE_ANONYMOUS" />
            <sec:intercept-url pattern="/welcome.htm"           access="ROLE_executer,ROLE_viewer,ROLE_admin_user" />

            <!-- Write Access -->
            <sec:intercept-url pattern="/addNewRecord.htm"      access="ROLE_executer,ROLE_admin_user" />
            <sec:intercept-url pattern="/updateRecord.htm"      access="ROLE_executer,ROLE_admin_user" />
            <sec:intercept-url pattern="/deleteRecord.htm"      access="ROLE_executer,ROLE_admin_user" />
            <sec:intercept-url pattern="/uploadFile.htm"        access="ROLE_executer,ROLE_admin_user" />

            <!-- Read Access to All Other-->
            <sec:intercept-url pattern="/**"                    access="ROLE_executer,ROLE_viewer,ROLE_admin_user"/>                        
        </sec:filter-invocation-definition-source>
    </property>
</bean> 

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

角色不必是大写的。但是,在正常配置中,RoleVoter会查找前缀ROLE_,这是区分大小写的。请参阅this FAQ

您可以将角色选民配置为具有空前缀(或小写的前缀,如果这是您想要的),或者您可以使用基于表达式的访问 - 请参阅this answer。< / p>

或者,您可以使用AuthenticationProvider配置GrantedAuthoritiesMapper,将角色从外部系统转换为可由Spring Security RoleVoter使用的值 - 请参阅{ {3}}