Spring security 不再需要Spring安全角色前缀?
我一直在研究如何创建自定义角色前缀,直到我意识到这并不重要。只要我在数据库中的角色与以下内容匹配:Spring security 不再需要Spring安全角色前缀?,spring-security,roles,prefix,Spring Security,Roles,Prefix,我一直在研究如何创建自定义角色前缀,直到我意识到这并不重要。只要我在数据库中的角色与以下内容匹配: <security:intercept-url pattern="/person/myProfile/**" access= "hasRole('BlaBla')" /> 这并不是一个例子,在db中,我确实设置了角色BlaBla进行测试,它可以正常工作 我不喜欢我有不同的行为——很多人都有设置自定义前缀来创建自定义角色的问题。这里发生了什么,我应该期待暗礁吗 我有3.0.7版本。
<security:intercept-url pattern="/person/myProfile/**" access= "hasRole('BlaBla')" />
这并不是一个例子,在db中,我确实设置了角色BlaBla进行测试,它可以正常工作
我不喜欢我有不同的行为——很多人都有设置自定义前缀来创建自定义角色的问题。这里发生了什么,我应该期待暗礁吗
我有3.0.7版本。在我的权限查询中,我没有“默认”值。。。
这是由版本引起的吗?可能您正在使用:
<http use-expressions="true">
这将配置一个WebExpressionVoter,它将为具有授予权限“BlaBla”的用户投票为真(在您的案例中)
请记住,安全对象(例如URL)的授权由AccessDecisionManager执行
有三种具体的决策管理者:肯定的、一致的和一致的
为了获得决策权,他们使用了一份AccessDecision选民名单
RoleVoter,您所期望的,它具有rolePrefix可配置(默认情况下为ROLE_uu)、AuthenticatdVoter和新的WebExpressionVoter
别忘了AccessDecisionManager及其投票者的组合可能会以一种你认为合乎逻辑的方式允许或拒绝许可
我建议您调试请求,以查看URL和模式是否与您期望的匹配。我使用的几乎是默认配置。所以我想我没有AccessDecisionManager和多个投票人的组合。我的请求是完全有效的(其他角色和匿名者无法访问资源),所以我猜这个WebExpressionVoter就是罪魁祸首。反正很奇怪。什么时候选择roleVoter?它如何知道选择哪一个?假设WebExpressionVoter仍能使用方法级安全性?@Aubergine
Voter
s未被“选中”:始终要求每个Voter
进行投票,然后AccessDecisionManager
组合所有投票以做出最终决定。默认的AccessDecisionManager
是AffirmativeBased
,只要没有投票者
拒绝访问,并且至少有一个投票者
允许访问,就允许访问。请注意,Voter
s可以(并且经常)弃权,而AccessDecisionManager
通常将其解释为“我不介意此访问尝试”。在您的情况下,WebExpressionVoter
允许访问,而另一个Voter
s弃权,因此最终访问权被授予。对于误解,我深表歉意。我的意思是我不知道您的配置(applicationContext security.xml的内容),但如果您使用带有安全命名空间的表达式,则WebExpressionVoter已配置。@jbbarquero我使用的是use expressions=true
和Spring security 4.0.1,并且任何没有“role_”前缀的角色都不起作用,有什么我遗漏的吗?检查问题。我认为你应该改用hasAuthority。