【问题标题】:Using class level @PreAuthorized annotations alongside method level @PreAuthorzied annotations将类级别 @PreAuthorized 注释与方法级别 @PreAuthorzied 注释一起使用
【发布时间】:2019-01-24 22:12:39
【问题描述】:

我试图让控制器类上的@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',并且使用通用类注释会更方便。

【问题讨论】:

    标签: java spring annotations spring-security-oauth2


    【解决方案1】:

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

    【讨论】:

    • 嗨@Vinay Avasthi,感谢您的回复,我知道这是默认行为,但是否有任何配置可用于更改此类行为或任何已知的解决方法,所有我的搜索不成功
    • @vega2015 你找到解决方案了吗?
    • 解决方案可以是@PreAuthorize 的自定义实现。实现自定义注释并添加将在方法之前使用的方面并不难。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-24
    • 1970-01-01
    • 1970-01-01
    • 2012-01-01
    • 2010-12-24
    • 2016-06-21
    • 2017-10-23
    相关资源
    最近更新 更多