首页 > 其他分享 >SpringSecurity异常处理器

SpringSecurity异常处理器

时间:2022-10-03 12:31:34浏览次数:52  
标签:SpringSecurity json 处理器 message 异常 response

原理

在SpringSecurity中,在认证或者授权的过程中出现的异常会被ExceptionTranslationFilter捕获到,在ExceptionTranslationFilter中会去判断这异常是认证失败还是授权失败产生的:

  • 认证过程中出现的异常,会被封装成AuthenticationException,SpringSecurity会调用AuthenticationEntryPoint对象的方法处理这个异常
  • 授权过程中出现的异常,会被封装成AccessDeniedException,SpringSecurity会调用AccessDeniedHandler对象的方法处理这个异常 所以,自定义异常处理,只需要自定义AuthenticationEntryPoint和AccessDeniedHanler,然后在SpringSecurity中进行配置即可。

示例

第一步:自定义认证失败处理器

/**
 * 认证失败处理器
 *
 * @author hc
 */
@Component
public class AuthenticationEntryPointImpl implements AuthenticationEntryPoint {

    @Override
    public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException, ServletException {
        response.setStatus(200);
        response.setContentType("application/json");
        response.setCharacterEncoding("utf-8");
        String message = authException.getMessage();
        if (message == null){
            message = "您的权限不足";
        }
        String json = "{\"code\":\"401\",\"msg\":"+ message +"}";
        response.getWriter().write(json);
    }

}

第二步:自定义授权失败处理器

/**
 * 授权失败处理器
 *
 * @author hc
 */
@Component
public class AccessDeniedHandlerImpl implements AccessDeniedHandler {
    @Override
    public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException accessDeniedException) throws IOException {
        response.setStatus(200);
        response.setContentType("application/json");
        response.setCharacterEncoding("utf-8");
        String message = accessDeniedException.getMessage();
        if (message == null){
            message = "您的权限不足";
        }
        String json = "{\"code\":\"403\",\"msg\":"+ message +"}";
        response.getWriter().write(json);
    }
}


### 第三步:在SpringSecurity配置文件中配置:
```java
@Resource
private AuthenticationEntryPointImpl authenticationEntryPoint;
@Resource
private AccessDeniedHandlerImpl accessDeniedHandler;

@Override
protected void configure(HttpSecurity http) throws Exception {
    ……
    //处理异常处理器
    http.exceptionHandling()
            .authenticationEntryPoint(authenticationEntryPoint) //认证失败处理器
            .accessDeniedHandler(accessDeniedHandler) //授权失败处理器
    ;
}

第四步:测试。

标签:SpringSecurity,json,处理器,message,异常,response
From: https://blog.51cto.com/lianghecai/5730107

相关文章

  • 封装全局异常处理(Java)
    封装全局异常处理1.定义业务异常类作用:1.相对于java的异常类,支持更多字段2.自定义构造函数,更灵活/快捷的设置字段 /***自定义异常类*@authorLL*/publ......
  • 【Spring】SpringSecurity的使用
    4SpringSecurity只需要协助SpringSecurity创建好用户对应的角色和权限组,同时把各个资源所要求的权限信息设定好,剩下的像“登录验证”、"权限验证"等等工作都交给Spring......
  • Spring整合Mybatis连接MySQL数据库配置 异常 情景再现
    Spring整合Mybatis连接MySQL数据库配置情景再现注意点一:数据库Table表字段和Entity实体类属性名不匹配解决:方法一:开启下划线转大驼峰命名mybatis:configurati......
  • 主线程异常会导致 JVM 退出?
     大家好,我是坤哥上周​​线程崩溃为什么不会导致JVM崩溃​​在其他平台发出后,有一位小伙伴留言说有个地方不严谨他认为如果JVM中的主线程异常没有被捕获,JVM还是会崩溃......
  • 003.异常分类及处理——异常的概念——异常分类——异常处理方式:抛出异常、使用try ca
    2.2.2异常分类在Java中,Throwable是所有错误或异常的父类,Throwable又可分为Error和Exception,常见的Error有AWTError、ThreadDeath、Exception又分为RuntimeException......
  • 字段类型处理器
    pom.xml<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency>......
  • Spring MVC入门(十):异常处理
    异常处理简介SpringMVC提供了一个处理控制器方法执行过程中所出现的异常的接口:HandlerExceptionResolverHandlerExceptionResolver接口的实现类有:DefaultHandlerExceptionRe......
  • 异常处理和泛型
    异常处理异常的格式publicstaticvoidmain(String[]args){//可能会出异常的代码,需要使用try来处理,try不能单独使用,必须配合finally或catch使用try{in......
  • TI AM5728 DSP+ARM+FPGA多核异构工业控制处理器
    TIAM5728DSP+ARM+FPGA多核异构工业控制处理器。DSP用于复杂算法处理,ARM用于通用事务管理,FPGA用于高速信号采集,是个完美的高性能嵌入式工业主板组合。 DSP算法开发对于DSP......
  • Python异常处理
    认识异常通俗讲,异常就是程序运行中报的错。异常是Python对象,表示一个错误。当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行异常的类型Python程序运行出......