我的应用程序中有一个角色约定机制,每个角色都遵循以下语法:
APP_DEPARTMENT1_USER
APP_DEPARTMENT1_AUDITOR
APP_DEPARTMENT1_WHATEVER
APP_DEPARTMENT2_...
我想配置Spring安全性,以允许与给定后缀匹配的所有角色都被授予对Web应用程序部分的访问权限。我盲目尝试了
<intercept-url pattern="/secure/audit/**" access="APP_*_AUDITOR,APP_ADMINISTRATOR" />
(其中APP_ADMINISTRATOR
是我的默认管理员角色),但是没有用。当我以管理员身份登录时,可以访问该页面,但是当我尝试使用带有APP_DEPARTMENT1_AUDITOR
的配置文件登录时,则无法访问该页面。我认为不支持通配符表达式,并且我不认为Spring EL表达式可能会有所帮助(或者我只是对它们不够精通)。
有什么方法可以在
<intercept-url>
标记内为Spring Security配置角色模式? 最佳答案
一种解决方案是使用Spring Security对role hierarchies的内置支持,并指定一个通用的APP_AUDITOR
角色,该角色“包括”各个部门的审核员角色。
一种替代方法是创建您自己的可以使用模式的改进角色投票器,因为现有实现仅执行simple equality test。基于这个现有的类,应该容易地进行一些模式匹配。一旦安装好,就可以通过以下方式将自定义投票者与安全基础结构连接起来:
<http access-decision-manager-ref="myAccessDecisionManager">
...
</http>
<bean id="myAccessDecisionManager"
class="org.springframework.security.access.vote.AffirmativeBased">
<constructor-arg name="decisionVoters">
<list>
<bean id="patternBasedRoleVoter"
class="com.example.PatternBasedRoleVoter"/>
<bean id="authenticatedVoter"
class="org.springframework.security.access.vote.AuthenticatedVoter"/>
</list>
</constructor-arg>
</bean>
关于spring-security - 在Spring Security角色中使用通配符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17926544/