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

时间:2019-01-24 22:12:39

标签: 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");    
    }
}

当前发生的是仅考虑方法级别的注释。

理想情况下,只有角色为“ CLASS_LEVEL_ROLE”和“ ”的用户才能访问bar()。

我知道我可以使用

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

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

1 个答案:

答案 0 :(得分:0)

@PreAuthorize允许类级别的注释。它的工作方式是,如果存在方法级别的注释,它将覆盖类级别的注释。您不能两者兼而有之。因此,当不存在方法级别的注释时,类级别的注释可以被视为后备。