1

我遇到了一个问题,我的控制器方法与@RolesAllowed 可以正常工作,但如果我尝试使用@Secured,我会得到一个AccessDeniedException。虽然我更喜欢使用@RolesAllowed 注释,但已经声明对于这个项目我们应该使用@Secured,因为当映射到我们的旧访问权限时,名称不会那么混乱。

我的注释配置如下:

<security:global-method-security jsr250-annotations="enabled" secured-annotations="enabled" pre-post-annotations="enabled" />

当我使用@RolesAllowed("COMPANY_SEE_REPORTS")我的用户拥有的时,它可以正常工作。当我使用时,@Secured("COMPANY_SEE_REPORTS")我得到一个 AccessDeniedException。为了确保@RolesAllowed 正常工作,我将角色更改为不存在的角色,然后@RolesAllowed 抛出了。所以我的问题是如何让@Secured 正常工作?

4

1 回答 1

3

尝试使用名称以结尾的安全角色ROLE

来自 Spring 安全参考

角色投票者

Spring Security 提供的最常用的 AccessDecisionVoter 是简单的 RoleVoter,它将配置属性视为简单的角色名称,如果用户被分配了该角色,则投票授予访问权限。

如果任何 ConfigAttribute 以前缀 ROLE_ 开头,它将投票。如果有一个 GrantedAuthority 返回一个字符串表示(通过 getAuthority() 方法),它将投票授予访问权限,该字符串表示与一个或多个以前缀 ROLE_ 开头的 ConfigAttributes 完全相同。如果没有任何以 ROLE_ 开头的 ConfigAttribute 完全匹配,则 RoleVoter 将投票拒绝访问。如果没有 ConfigAttribute 以 ROLE_ 开头,则投票者将弃权。

但是你可以修改 RoleVoter 前缀RoleVoter#setRolePrefix(String rolePrefix)

于 2013-06-28T00:28:55.417 回答