天天看點

Spring Security中配置AccessDeniedHandler沒有生效

現象

在 WebSecurityConfigurerAdapter 配置了如下代碼:

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

通路接口 /hello,報服務端 500 錯誤,沒有執行我們設定的 accessDeniedHandler 來處理權限不足的異常。

原因

@PreAuthorize 注解的異常,抛出 AccessDeniedException 異常,不會被 accessDeniedHandler 捕獲,而是會被全局異常捕獲。全局異常處理 AccessDeniedException 的相關示例代碼:

如果需要被 accessDeniedHandler 捕獲處理,則需要這麼寫 WebSecurityConfigurerAdapter 的代碼: