将类级别 @PreAuthorized 注释与方法级别 @PreAuthorzied 注释一起使用

veg*_*015 5 java spring annotations spring-security-oauth2

我试图在控制器类上获取 @PreAuthorized 注释,以便与同一类的方法(端点)上的 @PreAuthorized 注释结合使用。该类的概述如下所示:

@RestController
@RequestMapping("/api")
@PreAuthorized("hasRole('CLASS_LEVEL_ROLE')")
public class foo { 

    @GetMapping("/test")
    @PreAuthorized("hasRole('METHOD_LEVEL_ROLE')")
    @Timed
    public ResponseEntity<String> bar() {
            return ResponseEntity.ok().body("entered method successfully");    
    }
}
Run Code Online (Sandbox Code Playgroud)

目前所发生的情况仅考虑方法级别注释。

理想情况下,只有具有“CLASS_LEVEL_ROLE”“METHOD_LEVEL_ROLE”角色的用户才被允许访问 bar()。

我知道我可以使用

@PreAuthorized("hasRole('CLASS_LEVEL_ROLE') and hasRole('METHOD_LEVEL_ROLE')")

但我有一些控制器,其中所有端点都必须具有相同的,'CLASS_LEVEL_ROLE'并且使用通用类注释会更方便。

小智 9

@PreAuthorize 允许类级别注释。它应该工作的方式是,如果存在方法级别注释,它将覆盖类级别注释。你不能将两者结合起来。因此,当方法级别注释不存在时,类级别注释可以被视为后备。

  • @Vinay Avasthi,您好,谢谢您的回复,我知道这是默认行为,但是是否有任何配置可用于更改此类行为或任何已知的解决方法,我的所有搜索均不成功 (2认同)