天天看点

Spring Security中配置AccessDeniedHandler没有生效

现象

在 WebSecurityConfigurerAdapter 配置了如下代码:

在 Controller 层 REST 接口中添加有 @PreAuthorize 注解:

访问接口 /hello,报服务端 500 错误,没有执行我们设置的 accessDeniedHandler 来处理权限不足的异常。

原因

@PreAuthorize 注解的异常,抛出 AccessDeniedException 异常,不会被 accessDeniedHandler 捕获,而是会被全局异常捕获。全局异常处理 AccessDeniedException 的相关示例代码:

如果需要被 accessDeniedHandler 捕获处理,则需要这么写 WebSecurityConfigurerAdapter 的代码: