如果SpEL执行失败,如何跳过Java中的PreAuthorize?

时间:2019-12-06 10:14:21

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

我已经使用一些自定义SpEL函数保护了我的API端点。但是,由于在@PreAuthorize中使用SpEL可能会由于构造SpEL表达式中的异常而导致运行时错误。我想让@PreAuthorize发生时,SPELExecutionException返回true。

1 个答案:

答案 0 :(得分:0)

由于@PreAuthorize用于验证请求者是否具有所需的授权,因此在系统出现错误的情况下,用户绕过此安全机制没有任何意义。

您仍然可以绕过此操作。看看下面的代码片段: 只是更正是SpEL

@PostMapping()
@PreAuthorize("#{@someBean.validateAccess('HAS_ACCESS_TO_MY_METHOD')}")
public ResponseEntity<?> myMethod(@RequestBody final MyRequestBody requestBody) {       
    //some logic
}

@Service
public class SomeBean {

    public boolean validateAccess(String permission){
        boolean isAuthorized = false;
        try{
             //some logic to authorize
             // set the hasAccess variable to true or false based on your logic
             isAuthorized = true;
        } catch (Exception e) {
             // if some exception occurs set it to true
            isAuthorized = true;
        }
        return isAuthorized;
    }
}