基于spring-security 401 403错误自定义处理方案
spring-security 401 403错误自定义处理
为了返回给前端统一的数据格式,
一般所有的数据都会以类似下面的方式返回:
public class APIResultDto<T> {
/**
* 状态码:-1代表成功,具体参考APIErrorCode类
*/
private int er;
/**
* 状态描述,可以自行设置或使用APIErrorCode类中默认描述
*/
private String erMessage;
/**
* 实际返回实体,isSuccess()返回true时该字段有效
*/
private T items;
}
但是一些框架,比如本文要说的spring-security是不按照我们自定义规范处理的,幸运的是spring-security框架给了我们可以定制化的地方,只需继承
ResourceServerConfigurerAdapter
重写
public void configure(ResourceServerSecurityConfigurer resources) throws Exception
方法即可,在里面添加自定义的针对授权时返回的401以及403错误码,
具体如下:
@Autowired
private AccessDeniedHandler accessDeniedHandler;
@Autowired
private AuthenticationEntryPoint authenticationEntryPoint;
@Override
public void configure(ResourceServerSecurityConfigurer resources) {
resources.authenticationEntryPoint(authenticationEntryPoint);
resources.accessDeniedHandler(accessDeniedHandler);
}
里面涉及到的AccessDeniedHandler以及AuthenticationEntryPoint
如下所示:
@Component
public class CustomizedAuthenticationEntryPoint implements AuthenticationEntryPoint {
@Override
public void commence(HttpServletRequest request, HttpServletResponse response,
AuthenticationException authException) throws IOException, ServletException {
response.setContentType("application/json;charset=UTF-8");
//按照系统自定义结构返回授权失败
response.getWriter().write(JSON.toJSONString(APIResultDto.failed(APIErrorCode.AUTH_FAILED)));
}
}
@Component
public class CustomAccessDeniedHandler implements AccessDeniedHandler {
@Override
public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException accessDeniedException) throws IOException, ServletException {
response.setContentType("application/json;charset=UTF-8");
//按照系统自定义结构返回授权失败
response.getWriter().write(JSON.toJSONString(APIResultDto.failed(APIErrorCode.AUTH_FAILED)));
}
}
关于状态码401与403区别
401 表示用户没有权限(令牌,用户名,密码错误)
403 表示用户有权限,只是访问是被禁止的(可以理解为,用户有权限,但是某些目录禁止访问)
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
解决spring-boot2.0.6中webflux无法获得请求IP的问题
这几天在用 spring-boot 2 的 webflux 重构一个工程,写到了一个需要获得客户端请求 IP 的地方,在写的过程中遇到很多问题,下面小编通过一段代码给大家介绍解决spring-boot2.0.6中webflux无法获得请求IP的问题,感兴趣的朋友跟随小编一起看看吧2018-10-10
application.yml文件中如何开启mybatis自动驼峰映射
这篇文章主要介绍了application.yml文件中开启mybatis自动驼峰映射的方法,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2023-08-08
SpringCloud使用Kafka Streams实现实时数据处理
使用Kafka Streams在Spring Cloud中实现实时数据处理可以帮助我们构建可扩展、高性能的实时数据处理应用,Kafka Streams是一个基于Kafka的流处理库,本文介绍了如何在SpringCloud中使用Kafka Streams实现实时数据处理,需要的朋友可以参考下2024-07-07
IntelliJ IDEA打开多个Maven的module且相互调用代码的方法
这篇文章主要介绍了IntelliJ IDEA打开多个Maven的module且相互调用代码的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2019-02-02
Mybatis配置之<environments>配置元素详解
这篇文章主要介绍了Mybatis配置之<environments>配置元素,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-01-01


最新评论