不再需要Spring Security ROLE_前缀?

时间:2011-11-29 17:02:23

标签: spring-security roles prefix

我正在调查如何创建自定义角色前缀,直到我意识到它无关紧要。只要我的数据库中的角色符合以下内容:

<security:intercept-url pattern="/person/myProfile/**" access= "hasRole('BlaBla')" />

并且它不是示例,在db中我确实设置角色BlaBla进行测试并且它有效。

当我得到不同的行为时,我不喜欢 - 很多人都有设置自定义前缀来创建自定义角色的问题。在这里会发生什么,我应该期待隐藏的岩石吗?

我有3.0.7版本。在我对权限的查询中,我没有'默认'值... 它是由版本引起的吗?

1 个答案:

答案 0 :(得分:2)

可能你正在使用:

 <http use-expressions="true"> 

配置一个WebExpressionVoter,对具有授权权限“BlaBla”(在您的情况下)的用户投票赞成

请记住,安全对象的授权(例如URL)由AccessDecisionManager执行。

有三个具体的AccessDecisionManagers:肯定,共识和不一致。

为了接受这些决定,他们使用了一个AccessDecissionVoters列表。

RoleVoter,您期望的,具有rolePrefix可配置(默认情况下为ROLE_),AuthenticatdVoter和新的WebExpressionVoter。

不要忘记,AccessDecissionManager及其选民的组合可以以您认为不合逻辑的方式允许或拒绝该权限。

我建议您调试请求以查看URL和模式是否与预期匹配。