使用Spring自定义方法安全性表达式的自定义注释继承@PreAuthorize注释

时间:2020-09-28 13:45:06

标签: java spring spring-boot spring-security annotations

我已经在Spring Boot项目中成功实现了“自定义方法安全性”表达式。

这是我的表情根:

public class CustomMethodSecurityExpressionRoot extends SecurityExpressionRoot implements MethodSecurityExpressionOperations {

    public boolean checkTwoParamsAreEqual(Long param1, Long param2){
        return param1.equals(param2);
    }

    //constructor and overridden methods ignored for brevity

}

所有其他方法安全性表达式所需的配置和处理程序均已正确实现。

在我的控制器类中,我做了:

@GetMapping("/test")
@PreAuthorize("checkTwoParamsAreEqual(#id1, #id2)")
public String tst( @RequestParam("id1") Long id1, @RequestParam("id2") Long id2){
   return "Voila!!!";
}

这样,当我为id1id2请求参数发出具有相同值的get请求时,它返回Voila!!!,对于不同的请求参数值,则抛出403异常。这正是我想要的。


现在,我想通过为@PreAuthorize使用自定义注释类来优化我的上述代码。

我的自定义注释定义为:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Inherited
@PreAuthorize("checkTwoParamsAreEqual(#id1, #id2)")
public @interface PreCheckParamsAreEqual {
}

然后,我通过以下方式更新了控制器:

@GetMapping("/test")
@PreCheckParamsAreEqual
public String tst( @RequestParam("id1") Long id1, @RequestParam("id2") Long id2){
   return "Voila!!!";
}

通过此更改,无论我为请求参数id1id2传递什么值,它们始终返回“ Voila !!!”。我不知道如何使用参数创建自定义注释。

0 个答案:

没有答案