如果SpEL执行失败,如何在Java中跳过预授权?

如果SpEL执行失败,如何在Java中跳过预授权?,java,spring-boot,spring-security,spring-el,Java,Spring Boot,Spring Security,Spring El,我已经使用一些自定义SpEL函数保护了我的API端点。但是,由于在@PreAuthorize中使用SpEL可能会由于构造SpEL表达式时出现异常而导致运行时错误。当发生SPELExecutionException时,我想让@PreAuthorize返回true。由于@PreAuthorize用于验证请求者是否具有所需的授权,因此在系统出错时,用户绕过此安全机制没有任何意义 你仍然可以绕过这个。请看下面的代码片段: 只是更正一下,是斯佩尔 @PostMapping() @PreAuthorize(

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

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

你仍然可以绕过这个。请看下面的代码片段: 只是更正一下,是斯佩尔

@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;
    }
}
@PostMapping()
@预授权(#{@someBean.validateAccess('HAS_ACCESS_TO_MY_METHOD'))
公共响应属性myMethod(@RequestBody final MyRequestBody RequestBody){
//一些逻辑
}
@服务
公共类SomeBean{
公共布尔validateAccess(字符串权限){
布尔值未授权=false;
试一试{
//授权的一些逻辑
//根据逻辑将hasAccess变量设置为true或false
isAuthorized=真;
}捕获(例外e){
//如果发生异常,请将其设置为true
isAuthorized=真;
}
返回被授权;
}
}

Hi@Sagar,这不是我要找的。我所说的是减少由于代码错误而导致API端点不可用的运行时错误。举个例子:考虑一个开发人员把函数写为:<代码> @预授权(“HasPurmisOn(′id id),id”)<代码> ---这是一个简单的键入,它会导致一个拼写错误,使API端点不可用,并且我想在编译时捕获这个错误,或者绕过这样的执行错误并返回true。您显示的try/catch块只有在调用方法时才起作用。到目前为止,我认为它不受支持,但您仍然可以查看文档()