SpringSecurity 自定义 AccessDeniedHandler 不生效的问题解决

导读:本篇文章讲解 SpringSecurity 自定义 AccessDeniedHandler 不生效的问题解决,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

问题描述

在 Security配置类中 正确配置了 AccessDeniedHandler,但是发现实际运行时 AccessDeniedHandler 没有被触发!

问题原因

出现这种问题的原因一般都是因为项目中还配置了 GlobalExceptionHandler 。

由于GlobalExceptionHandler 全局异常处理器会比 AccessDeniedHandler 先捕获 AccessDeniedException 异常,因此当配置了 GlobalExceptionHandler 后,会发现 AccessDeniedHandler 失效了。

解决方案

  1. 原有的 GlobalExceptionHandler 不用修改,只需要增加一个 自定义的 AccessDeniedExceptionHandler 即可。

  2. AccessDeniedExceptionHandler 如下

    import org.springframework.security.access.AccessDeniedException;
    import org.springframework.web.bind.annotation.ControllerAdvice;
    import org.springframework.web.bind.annotation.ExceptionHandler;
    
    /**
     * Created by 大雪冬至 on 2021/7/6.
     * 解决 GlobalExceptionHandler 会消费掉 AccessDeniedException ,导致 AccessDeniedHandler 不会被触发的问题.
     */
    @ControllerAdvice
    public class AccessDeniedExceptionHandler {
        @ExceptionHandler(AccessDeniedException.class)
        public void accessDeniedException(AccessDeniedException e) throws AccessDeniedException {
            throw e;
        }
    }
    
  3. 此时异常就可以被你自定义的 AccessDeniedHandler 处理了

更多参考

https://github.com/spring-projects/spring-security/issues/6908

https://stackoverflow.com/questions/31074040/custom-accessdeniedhandler-not-called

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/15258.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!