bug产生如图所示
在全局异常处理器中更具体的异常AccessDeniedException没有被捕获到,反而捕获到了RuntimeException异常。
从图中看出绿色的debug具体的异常为AccessDeniedException,但是却没有走accessDeniedExceptionHandler函数
网上搜索无果之后,将代码逻辑改成如此。但是if语句的执行结果为false之后,才发现IDEA自动引入的包名为import java.nio.file.AccessDeniedException;而实际需要的包为import org.springframework.security.access.AccessDeniedException;因此所产生的错误。修改之后就能成功解决
补充Spring Security的知识点
http.exceptionHandling().accessDeniedHandler((req, resp, e) -> {
ServletUtils.writeJson(ResponseDataUtil.buildSend(ResultEnums.LOGIN_USER_ACCESS_DENIED));
});
关于accessDeniedHandler没有执行反而被异常处理器捕获的bug
参考文章:https://blog.51cto.com/u_11334685/5740164
由于SpringSecurity异常处理是在用的是Javaweb中的filter进行处理,而不是SpringMvc的过滤器中,而在返回请求时SpringMvc的方法总是在filter之前执行(在请求进来时反之,简单理解成SpringMvc运行在Javaweb的环境中),所以全局异常处理器会在filter之前执行
参考文章:https://blog.csdn.net/weixin_43702146/article/details/118606502