捕获SpringSecurity异常,进行统一返回

无法捕获SpringSecurity的认证和鉴权中发生异常的原因

使用@ControllerAdvice的全局异常处理器无法捕获到SpringSecurity中的异常,原因如下:

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

  •     ​如果是【认证】过程中出现的异常会被封装成AuthenticationException然后调用AuthenticationEntryPoint对象的方法去进行异常处理。
  •     ​如果是授权过程中出现的异常会被封装成AccessDeniedException然后调用AccessDeniedHandler对象的方法去进行异常处理。

​所以如果我们需要自定义异常处理,我们只需要实现AuthenticationEntryPoint和AccessDeniedHandler接口,然后配置给SpringSecurity即可

代码实现

WebUtils工具类,用来渲染字符串:

public class WebUtils {/*** 将字符串渲染到客户端** @param response 渲染对象* @param string   待渲染的字符串* @return null*/public static String renderString(HttpServletResponse response, String string) {try {response.setStatus(200);response.setContentType("application/json");response.setCharacterEncoding("utf-8");response.getWriter().print(string);} catch (IOException e) {e.printStackTrace();}return null;}
}

AuthenticationEntryPoint 自定义实现类

@Component
public class AuthenticationEntryPointImpl implements AuthenticationEntryPoint {@Overridepublic void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException, ServletException {ResponseResult result = new ResponseResult(401, authException.getMessage());String json = JSON.toJSONString(result);WebUtils.renderString(response, json);}
}

 AccessDeniedHandler 自定义实现类:

@Component
public class AccessDeniedHandlerImpl implements AccessDeniedHandler {@Overridepublic void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException accessDeniedException) throws IOException, ServletException {ResponseResult result = new ResponseResult(403, accessDeniedException.getMessage());String json = JSON.toJSONString(result);WebUtils.renderString(response, json);}
}

将自定义异常处理器配置给SpringSecurity

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {//注入@Autowiredprivate AuthenticationEntryPoint authenticationEntryPoint;@Autowiredprivate AccessDeniedHandler accessDeniedHandler;@Overrideprotected void configure(HttpSecurity http) throws Exception {//配置自定义异常处理器http.exceptionHandling().authenticationEntryPoint(authenticationEntryPoint).accessDeniedHandler(accessDeniedHandler);}
}

测试

授权未通过时:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/521087.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

A Multimodal Transfer Learning Approach for Medical Image Classification

是否可训练可用🔥和❄表示,这样更美观 辅助信息 作者未提供代码

论文阅读:Scalable Diffusion Models with Transformers

Scalable Diffusion Models with Transformers 论文链接 介绍 传统的扩散模型基于一个U-Net骨架,这篇文章提出了一种新的扩散模型结构,将U-Net替换为一个transformer,并将这种结构称为Diffusion Transformers (DiTs)。他们还发现&#xff…

2024最新GPT4.0使用教程,AI绘画,一站式解决

一、前言 ChatGPT3.5、GPT4.0、GPT语音对话、Midjourney绘画,文档对话总结DALL-E3文生图,相信对大家应该不感到陌生吧?简单来说,GPT-4技术比之前的GPT-3.5相对来说更加智能,会根据用户的要求生成多种内容甚至也可以和…

什么是系统工程(字幕)47

0 00:00:01,940 --> 00:00:05,770 下一个图是16.28 1 00:00:06,070 --> 00:00:07,170 2 00:00:07,860 --> 00:00:09,740 它把这个 3 00:00:10,020 --> 00:00:12,210 控制器,还有用户界面 4 00:00:12,210 --> 00:00:15,130 加到这个IBD里面去了 5…

简介:图灵机和图灵测试

一、图灵机(Turing machine) 图灵机(Turing machine)是由英国数学家Alan Turing于1936年提出的一种抽象计算模型,阿兰图灵在24岁时发表论文《On Computable Numbers, with an Application to the Entscheidungsproble…

yudao-cloud 学习笔记

前端代码 浏览器打开 https://cloud.iocoder.cn/intro/ F12 执行代码 var aaa $(".sidebar-group-items").find("a"); var ll[]; var tt[]; for(var i0;i<aaa.length;i ){ ll.push("https://doc.iocoder.cn" $(aaa[i]).attr("href&quo…

一文读懂私网解析 PrivateZone

越来越多的企业认同&#xff0c;多云和混合云是实现数字化变革的必由之路。Cisco 发布的《2022 Global Hybrid Cloud Trends Report》显示&#xff0c; 82% 的受访者使用混合多云架构来支撑其应用程序。混合云架构下&#xff0c;如何灵活、可靠且低成本地满足各种场景 DNS 的解…

Unity性能优化篇(十一) 动画优化

1.恰当地设置Animator组件的Culling Mode。Always Animate表示如果该动画不可见&#xff0c;也会播放它。Cull Update Transformations表示如果该动画不可见&#xff0c;则不会渲染该动画&#xff0c;但是依然会根据该动画的播放来改变游戏对象的位置、旋转、缩放&#xff0c;这…

MySQL常见的索引类型介绍

我将为您详细讲解 MySQL 中常见的索引类型&#xff0c;以及它们的使用场景、特点、区别和优势。索引是提高数据库查询性能的关键工具&#xff0c;它可以加速数据检索速度&#xff0c;减少服务器的负担。在 MySQL 中&#xff0c;索引类型主要包括 B-Tree 索引、哈希索引、全文索…

数字人播报解决方案,支持形象定制化

随着数字化浪潮的持续推进&#xff0c;企业对高效、精准的播报解决方案的需求日益增长&#xff0c;美摄科技凭借其领先的数字人播报解决方案&#xff0c;为企业带来了前所未有的播报体验。该方案集主播视频编辑工具、灵活的部署式、智能合成、唇音同步/动作表达以及可定制主播形…

基于单片机的灭火机器人设计

目 录 摘 要 I Abstract II 引 言 1 1 系统方案设计 4 1.1 方案论证 4 1.2 灭火机器人系统工作原理 4 2 系统硬件设计 6 2.1 单片机 6 2.2 火焰探测系统设计 8 2.3 灭火系统设计 8 2.4 循迹模块设计 9 2.5 电机驱动模块 10 3 系统软件设计 12 3.1 系统软件开发环境 12 3.2 系统…

mysql的语法总结2

命令&#xff1a; mysql -u 用户名 -p mysql登录 命令&#xff1a;create database u1 创建数据库u1 查询数据库 使用数据库u1 创建表department 查询表department ALTER TABLE 表名 操作类型&#xff1b; 操作类型可以有以下的操作&#xff1a; 添加列&#x…