如何避免复制粘贴hasRole或hasPermission批注?

问题描述 投票:0回答:2

我有很多方法都需要对此注释进行注释:

@Override
@PostAuthorize("hasPermission(returnObject.id, 'mypackage.SecuredClazz', 'ADMINISTRATION')")
public MyObject findSectionAById(SomeId id) {
    ////the code
}

注解更加复杂,它包括hasRole和不同的hasPermission条件。许多对象正在实现mypackage.SecuredClazz并具有ID。结果,我在同一正文中有很多复制粘贴批注:

@PostAuthorize("hasPermission(returnObject.id, 'mypackage.SecuredClazz', 'ADMINISTRATION')")

是否有可能使用其他注释或其他方式不将整行复制到100个方法中?

java spring spring-security
2个回答
0
投票
您可以创建自己的注释,其中包括描述的注释:

@Target({ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @PostAuthorize("hasPermission(returnObject.id, 'mypackage.SecuredClazz', 'ADMINISTRATION')" public @interface SecuredClazzAuthorized { }

用法:

@Override @SecuredClazzAuthorized public MyObject findSectionAById(SomeId id) { ... }


0
投票
您可以创建一个元注释,请参见Spring Security Reference

方法安全性元注释

您可以使用元注释来确保方法的安全性,以使代码更具可读性。如果发现在整个代码库中重复相同的复杂表达式,这将特别方便。例如,考虑以下内容:

@PreAuthorize("#contact.name == authentication.name")

而不是在所有位置重复此操作,我们可以创建一个可以用作替代的元注释。

@Retention(RetentionPolicy.RUNTIME) @PreAuthorize("#contact.name == authentication.name") public @interface ContactPermission {}

元注释可用于任何Spring Security方法安全注释。为了保持符合规范,JSR-250注释不支持元注释。
© www.soinside.com 2019 - 2024. All rights reserved.