我遇到的问题是我的@RolesAllowed控制器方法正常工作,但如果我尝试使用@Secured,我会得到一个AccessDeniedException。虽然我更喜欢使用@RolesAllowed Annotation,但我们已经宣布,对于这个项目,我们应该使用@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正常工作?
答案 0 :(得分:2)
尝试使用名称以ROLE
From Spring Security Reference:
的RoleVoter
Spring提供的最常用的AccessDecisionVoter 安全性是简单的RoleVoter,它处理配置 属性作为简单的角色名称和投票以授予用户访问权限 被分配了这个角色。
如果任何ConfigAttribute以前缀ROLE _开头,它将投票。它 如果有返回的GrantedAuthority,将投票授予访问权限 String表示(通过getAuthority()方法)完全相等 到前缀为ROLE_的一个或多个ConfigAttributes。如果 从ROLE_开始,没有任何ConfigAttribute完全匹配, RoleVoter将投票拒绝访问。如果没有ConfigAttribute开始 如果是ROLE_,选民将投弃权票。
但您可以修改RoleVoter前缀RoleVoter#setRolePrefix(String rolePrefix)