在方法级别的@PreAuthorized注解旁使用类级别的@PreAuthorized注解。

5
我正在尝试让控制器类上的@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”和“METHOD_LEVEL_ROLE”角色的用户才能访问bar()。
我知道我可以使用
@PreAuthorized("hasRole('CLASS_LEVEL_ROLE') and hasRole('METHOD_LEVEL_ROLE')")
但是,我有一些控制器,其中所有端点都必须具有相同的'CLASS_LEVEL_ROLE',使用一个通用类注释会更方便。
1个回答

8

@PreAuthorize允许使用类级别的注解。其工作原理是,如果存在方法级别的注解,则会覆盖类级别的注解。你不能对两者进行合并。因此,当方法级别的注解不存在时,类级别的注解可以被视为后备。


2
嗨@Vinay Avasthi,感谢您的回复。我知道这是默认行为,但是否有任何配置可用于更改此类型的行为或任何已知的解决方法?我搜索了所有内容,但都没有成功。 - vega2015
@vega2015,你解决这个问题了吗? - SatheeshJM
解决方案可以是@PreAuthorize的自定义实现。实现自定义注释并添加在方法之前使用的切面并不难。 - Delirante

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接