Java 在Spring Security中使用@Secured或@PreAuthorize时如何覆盖defaultRolePrefix
我使用@Secured(“ADMIN”),我的角色定义也是ADMIN(而不是role_ADMIN)。当我访问API时,我没有得到预期的值,它说访问被拒绝 下面是代码,我是如何重写角色值的Java 在Spring Security中使用@Secured或@PreAuthorize时如何覆盖defaultRolePrefix,java,spring,spring-security,spring-security-oauth2,Java,Spring,Spring Security,Spring Security Oauth2,我使用@Secured(“ADMIN”),我的角色定义也是ADMIN(而不是role_ADMIN)。当我访问API时,我没有得到预期的值,它说访问被拒绝 下面是代码,我是如何重写角色值的 @PostMapping("/users") @Loggable @Secured({"Administrator"}) public ResponseEntity<?> createUser( @Valid @RequestBody User userRequest) { ..... }
@PostMapping("/users")
@Loggable
@Secured({"Administrator"})
public ResponseEntity<?> createUser( @Valid @RequestBody User userRequest) {
.....
}
但当我使用@Secured时,它不起作用
My DB包含USER1和USER2角色
非常感谢您的帮助。谢谢。您是否使用
@EnableGlobalMethodSecurity
启用了方法安全性?是的,我们已经启用了。我们使用了@EnableGlobalMethodSecurity(Prespenabled=true,securedEnabled=true,proxyTargetClass=true)。如果您想更改默认值,而不仅仅是AccessDecisionManager,那么在很多地方必须设置rolePrefix。请参阅。此外,我注意到添加了一个新类,该类应该会有所帮助:GrantedAuthorityDefaults
,通过集中默认rolePrefix的定义。(cont')但是,正如我刚才注意到的那样,它不起作用:为了在DefaultMethodSecurityExpressionHandler
(负责处理安全注释的许多类之一),它查找GrantedAuthorityDefaults bean;但是,在实例化该bean时,它加载后处理器,后处理器依次加载通知,后处理器依次加载……最后再次加载DefaultMethodSecurityExpressionHandler
,默认前缀设置为“角色”(这是尝试更改之前的默认值)!!!!!
.authorizeRequests().anyRequest().authenticated()
.accessDecisionManager(customAD()).hasRole("ADMIN")