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