Java 在Spring Security中使用@Secured或@PreAuthorize时如何覆盖defaultRolePrefix

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) { ..... }

我使用@Secured(“ADMIN”),我的角色定义也是ADMIN(而不是role_ADMIN)。当我访问API时,我没有得到预期的值,它说访问被拒绝

下面是代码,我是如何重写角色值的

@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")