我在基于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>
感谢您的帮助。
答案 0 :(得分:2)
角色不必是大写的。但是,在正常配置中,RoleVoter
会查找前缀ROLE_
,这是区分大小写的。请参阅this FAQ。
您可以将角色选民配置为具有空前缀(或小写的前缀,如果这是您想要的),或者您可以使用基于表达式的访问 - 请参阅this answer。< / p>
或者,您可以使用AuthenticationProvider
配置GrantedAuthoritiesMapper
,将角色从外部系统转换为可由Spring Security RoleVoter
使用的值 - 请参阅{ {3}}