当前位置: 首页 > news >正文

Spring Security OAuth2 认证服务器自定义异常处理

目录

    • 前言
    • WebResponseExceptionTranslator
    • 自定义异常处理
      • 1、自定义我们响应实体类
      • 2、定义响应结果枚举类
      • 3、自定义异常转换类
      • 4、配置自定义异常转换器
      • 5、测试

前言

Spring Security OAuth2 认证失败的格式如下

{"error": "unsupported_grant_type","error_description": "Unsupported grant type: refresh_token1"
}

这个返回是很不友好的,特别是在前后端分离的时候,前端一般是根据我们的返回码进行处理,所以我们还得自定义我们的异常处理

WebResponseExceptionTranslator

在 AuthorizationServerEndpointsConfigurer端点配置类有一个 WebResponseExceptionTranslator异常转换器。

WebResponseExceptionTranslator只有一个translate方法,很明显,这个方法就是用来转换异常的

public interface WebResponseExceptionTranslator<T> {ResponseEntity<T> translate(Exception e) throws Exception;}

它就是专门用于处理异常转换的,我们要自定义异常很简单,创建一个类来实现WebResponseExceptionTranslator接口,然后进行配置即

自定义异常处理

1、自定义我们响应实体类

定义一个我们需要格式的响应实体类,这个实体类我们以json的格式返回

/*** 统一的返回实体*/
@Data
@NoArgsConstructor
public class MyResponseResult<T>  {/*** 响应码*/private String code;/*** 响应结果消息*/private String msg;/*** 响应数据*/private T data;protected MyResponseResult(String code, String msg, T data) {this.code = code;this.msg = msg;this.data = data;}public static <T> MyResponseResult<T> failed(String resultCode, String resultMsg) {return new MyResponseResult<T>(resultCode, resultMsg, null);}public static <T> MyResponseResult<T> failed(String message) {return new MyResponseResult<T>(ResultCode.FAILED.getCode(), message, null);}public static <T> MyResponseResult<T> failed(T data) {return new MyResponseResult<T>(ResultCode.SUCCESS.getCode(), ResultCode.SUCCESS.getMsg(), data);}}

2、定义响应结果枚举类

/*** 响应结果枚举*/
@Getter
@AllArgsConstructor
public enum ResultCode {SUCCESS("200", "操作成功"),FAILED("500", "操作失败"),AUTH_FAIL("10001", "认证失败"),INVALID_TOKEN("10002", "token无效"),NONSUPPORT_GRANT_TYPE("10003", "授权类型不支持"),;private final String code;private final String msg;}

3、自定义异常转换类

/*** 自定义异常转换*/
@Slf4j
public class MyExtendOAuth2ResponseExceptionTranslator implements WebResponseExceptionTranslator {public static final int FAIL_CODE = 500;@Overridepublic ResponseEntity translate(Exception e) throws Exception {log.error("认证服务器认证异常:{}", e.getMessage());//对异常进行转换if (e instanceof UnsupportedGrantTypeException){return ResponseEntity.status(FAIL_CODE).contentType(MediaType.APPLICATION_JSON).body(MyResponseResult.failed(ResultCode.NONSUPPORT_GRANT_TYPE.getCode(), ResultCode.NONSUPPORT_GRANT_TYPE.getMsg()));}if (e instanceof InvalidTokenException) {return ResponseEntity.status(FAIL_CODE).contentType(MediaType.APPLICATION_JSON).body(MyResponseResult.failed(ResultCode.INVALID_TOKEN.getCode(),ResultCode.INVALID_TOKEN.getMsg()));}return ResponseEntity.status(FAIL_CODE).contentType(MediaType.APPLICATION_JSON).body(MyResponseResult.failed(ResultCode.AUTH_FAIL.getCode(),ResultCode.AUTH_FAIL.getMsg()));}}

4、配置自定义异常转换器

在AuthorizationServerConfig配置文件的configure(AuthorizationServerEndpointsConfigurer endpoints)方法加下下面这行配置即可

//指定异常转换器endpoints.exceptionTranslator(new MyExtendOAuth2ResponseExceptionTranslator());

5、测试

使用一个不存在的grant_type请求/oauth/token,已经返回我们自定义的异常响应了

{"code": "10003","msg": "授权类型不支持","data": null
}

相关文章:

Spring Security OAuth2 认证服务器自定义异常处理

目录 前言WebResponseExceptionTranslator自定义异常处理1、自定义我们响应实体类2、定义响应结果枚举类3、自定义异常转换类4、配置自定义异常转换器5、测试 前言 Spring Security OAuth2 认证失败的格式如下 {"error": "unsupported_grant_type","…...

selenium环境安装

一、下载安装python 下载python安装python设置python环境变量安装selenium &#xff08;1&#xff09;下载python 您可以从Python官方网站&#xff08;https://www.python.org/downloads/&#xff09;下载Python。在页面上&#xff0c;您将看到不同版本的Python供您选择。根…...

(C++)和为s的两个数字--双指针算法

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 和为S的两个数字_牛客题霸_牛客网输入一个升序数组 array 和一个数字S&#xff0c;在数组中查找两个数&#xff0c;使得他们的和正好是S&#xff0c;如果。题目来自【牛客题霸】https://www.nowcoder.com/practice/390da4f7a…...

鸿蒙(HarmonyOS)应用开发——构建页面(题目答案)

判断题 1.在Column容器中的子组件默认是按照从上到下的垂直方向布局的&#xff0c;其主轴的方向是垂直方向&#xff0c;在Row容器中的组件默认是按照从左到右的水平方向布局的&#xff0c;其主轴的方向是水平方向。 正确(True) 2.List容器可以沿水平方向排列&#xff0c;也可…...

Python基础快速过一遍

文章目录 一、变量及基本概念1、变量2、变量类型3、变量格式化输出4、type()函数5、input()函数6、类型转换函数7、注释 二、Python运算/字符1、算数运算2、比较运算3、逻辑运算4、赋值运算符5、转义字符6、成员运算符 三、判断/循环语句1、if判断语句2、while循环语句3、for循…...

等保测评报价相差很大,里面有什么门道

等保测评报价的差异主要源于以下几点&#xff1a; 服务质量评估标准不同&#xff1a;不同的测评机构在测评过程中所提供的服务范围、深度、细节等方面可能存在差异&#xff0c;因此导致报价有所不同。一些机构可能提供全面且细致的测评服务&#xff0c;致力于提供高质量的等保测…...

MATLAB的rvctools工具箱熟悉运动学【机械臂机器人示例】

1、rvctools下载安装 rvctools下载地址&#xff1a;rvctools下载 截图如下&#xff0c;点击红色箭头指示的“Download Shared Folder” 即可下载 下载之后进行解压&#xff0c;解压到D:\MATLAB\toolbox这个工具箱目录&#xff0c;这个安装路径根据自己的情况来选择&#xff0c…...

如何精准操作无人机自动停机坪?

无人机自动停机坪通过自主导航和避障功能&#xff0c;实现了无人机的自主降落和起飞&#xff0c;在无人机技术领域起到了至关重要的作用。停机坪不仅仅是无人机的起降平台&#xff0c;还具备自动换电或充电等功能&#xff0c;为无人机的自动化提供了关键支持。为更有效地操作无…...

【蓝桥杯】带分数

带分数 题目要求用一个ab/c的形式得到一个值&#xff0c;而且只能在1~9里面不重复的组合。 可以对1~9进行全排列&#xff0c;然后不断划分区间。 #include<iostream> #include<vector> using namespace std; int st[15]; int num[15]; int res; int n;int calc(i…...

软件工程 课堂测验 选择填空

系统流程图用图形符号表示系统中各个元素&#xff0c;表达了系统中各个元素之间的 信息流动 喷泉模型是一种以用户需求为动力&#xff0c;以 对象 为驱动的模型。 软件生存周期中最长的是 维护 阶段。 变换流的DFD由三部分组成&#xff0c;不属于其中一部分的是 事务中心 软…...

计算机网络的分类

目录 一、按照传输介质进行分类 1、有线网络 2、无线网络 二、按照使用者进行分类 1、公用网 (public network) 2、专用网(private network) 三、按照网络规模和作用范围进行分类 1、PAN 个人局域网 2、LAN 局域网 3、MAN 城域网 4、 WAN 广域网 5、Internet 因特…...

百度收录批量查询工具,免费SEO优化排名工具

拥有一个在搜索引擎中得到良好收录的网站对于个人和企业都至关重要。而百度&#xff0c;作为中国最大的搜索引擎&#xff0c;其收录情况直接影响着网站的曝光度和流量。 百度搜索引擎是中文用户获取信息的重要途径之一。而在这个竞争激烈的网络环境中&#xff0c;了解自己网站…...

select选择框里填充图片,下拉选项带图片

遇到一个需求&#xff0c;选择下拉框选取图标&#xff0c;填充到框里 1、效果展示 2、代码 <el-form-item label"工种图标" class"Form_icon Form_label"><el-select ref"select" :value"formLabelAlign.icon" placeholder&…...

轨道交通数字孪生可视化平台,助力城市交通运营智慧化

随着经济和科技的快速发展&#xff0c;轨道交通运营管理在日常操作者面临各种挑战。数字孪生技术被认为是未来轨道交通运营管理的重要手段之一。它可以提高轨道交通的运营效率和安全性&#xff0c;助力城市交通运营智慧化。以城市轨道交通运维管理业务需求为导向,从数据感知、融…...

【每日OJ —— 101. 对称二叉树】

每日OJ —— 101. 对称二叉树 1.题目&#xff1a;101. 对称二叉树2.解法2.1.算法讲解2.2.代码实现2.3.提交通过展示 1.题目&#xff1a;101. 对称二叉树 2.解法 2.1.算法讲解 1.该题是判断二叉树是否对称&#xff0c;关键在于&#xff0c;左子树等于右子树&#xff0c;而所给的…...

善网商城上线洁柔产品 公益人专享爱心价官方正品

近日&#xff0c;中国善网慈善商城&#xff08;以下简称善网商城&#xff09;系统经升级后重新上线。目前善网商城线上销售的中顺洁柔旗下慈善产品已顺利获得中顺洁柔纸业股份有限公司授权&#xff0c;双方就合作事宜达成共识&#xff0c;并于近日签订线上经营授权书。 &#x…...

禁止谷歌浏览器自动更新

禁止谷歌浏览器自动更新 在使用Python包selenium的时候浏览器版版本发生变化后产生很多问题如&#xff1a; 1、直接版本不对应无法运行 2、版本不一致导致debug启动浏览器超级慢 这里是已谷歌浏览器为代表的。 禁止自动更新的方法如下&#xff1a; 1、WinR调出运行&#x…...

Oracle存储过程返回DataSet(多个DataTable)给C#

一、存储过程 CREATE OR REPLACE PROCEDURE GET_SENDEXCEL_XY ( ZGJ182X OUT SYS_REFCURSOR , ZGJ182Y OUT SYS_REFCURSOR , ZXN182X OUT SYS_REFCURSOR , ZXN182Y OUT SYS_REFCURSOR , ZLH182X OUT SYS_REFCURSOR …...

如何往excel中写子表?

with pd.ExcelWriter("C:/last_date.xlsx") as writer:for i in range(0, 10):df pd.DataFrame()df.to_excel(writer, indexFalse, sheet_namestr(days[i 1]))...

Flutter 控件查阅清单

为了方便记录和使用Flutter中的各种控件&#xff0c;特写此博客以记之&#xff0c;好记性不如烂笔头嘛&#xff1a;&#xff09; 通过控件的首字母进行查找&#xff0c;本文会持续更新 控件目录 AAppBar BCContainerColumn &#xff08;列&#xff09; DDivider (分割线) EElev…...

【高效开发工具系列】gson入门使用

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

Python中的缺失值

Python中的缺失值 1、情景描述2、Python中的缺失值 1、情景描述 在使用Pandas中的文件读取API读取Excel、CSV或TXT等文件时&#xff0c;我们可能需要对读取到的数据进行简单清洗。例如&#xff0c;将其中的表示空值的字符串替换为真正意义上的缺失值 来看一个例子&#xff1a;…...

JVM 字节码

JVM概述 问题引出 你是否也遇到过这些问题&#xff1f; 运行着的线上系统突然卡死&#xff0c;系统无法访问&#xff0c;甚至直接OOM&#xff01;想解决线上JVM GC问题&#xff0c;但却无从下手。新项目上线&#xff0c;对各种JVM参数设置一脸茫然&#xff0c;直接默认吧&…...

ComfiUI API调用随记

来进行知识接力了&#xff1a; 首先了解下ComfiUI的APIstable diffusion comfyui的api使用教程-CSDN博客 对于ComfiUI&#xff0c;接口比较简单。查询接口比较容易看明白。 对于发起prompt的请求&#xff0c;如果需要图片的&#xff0c;则需预先上传图片给ComfiUI&#xff0c…...

Dockerfile讲解

Dockerfile 1. 构建过程解析2. Dockerfile常用保留字指令3. 案例3.1. 自定义镜像mycentosjava83.2. 虚悬镜像 4. Docker微服务实战 dockerfile是用来构建docker镜像的文本文件&#xff0c;是由一条条构建镜像所需的指令和参数构成的脚本。 dockerfile定义了进程需要的一切东西&…...

Ansible及其优势是什么?

Ansible是一款极其简单的开源的自动化运维工具&#xff0c;基于Python开发&#xff0c;集合了众多运维工具(puppet, cfengine, chef, func, fabric)的优点。实现了批量系统配置&#xff0c;批量程序部署&#xff0c;批量运行命令等功能。同时Ansible是基于模块工作&#xff0c;…...

使用群晖Docker搭建HomeAssistant并实现异地公网访问家中智能设备

最近&#xff0c;我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念&#xff0c;而且内容风趣幽默。我觉得它对大家可能会有所帮助&#xff0c;所以我在此分享。点击这里跳转到网站。 使用群晖Docker搭建HomeAssistant并实现异地公网访问 文章目录 使…...

重塑生成式AI时代数据战略,亚马逊云科技re:Invent大会Swami主题演讲

re:lnvent 2023 Swami Sivasubramanian主题演讲&#xff0c;数据、AI和人类共进共生&#xff0c;重塑生成式AI时代的数据战略。 赋能人才加持生成式AI必备能 生成式AI创新中心&#xff1a;解决生成式AI工程化挑战。 Amazon Bedrock平台PartyRock&#xff1a;生成式AI应用程序实…...

【恋上数据结构】哈夫曼树学习笔记

哈夫曼树 哈夫曼编码&#xff08;Huffman Coding&#xff09; 哈夫曼编码&#xff0c;又称为霍夫曼编码&#xff0c;它是现代压缩算法的基础 假设要把字符串 [ABBBCCCCCCCCDDDDDDEE] 转成二进制编码进行传输。 可以转成 ASCII 编码 (6569&#xff0c;10000011000101) &…...

前端下拉框select标签的插件——select2.js

本文采用的是select2 版本&#xff1a;Select2 4.0.6-rc.1。 可以兼容IE8及以上。亲测过。 官网&#xff1a;Getting Started | Select2 - The jQuery replacement for select boxes 一、认识select2.js 1、使用插件&#xff0c;首先要引入别人的插件了&#xff0c;你可以选…...

wordpress增加搜索框/邮件营销

★点开后电脑将在某一时间段后自动关机&#xff0c;输入如同“我是猪”一类的话语&#xff0c;即可结束&#xff0c;&#xff0c;&#xff0c;否则关机任务则会一直处于倒计时状态。。#include<stdio.h> //标准输入输出库函数 #include<stdlib.h> //可以输入…...

wordpress加载动画插/seo建站要求

表空间是oracle数据库中最大的逻辑单位与存储空间单位&#xff0c;数据库系统通过表空间为数据库对象分配空间。表空间在物理上体现为磁盘数据文件&#xff0c;每一个表空间由一个或多个数据文件组成&#xff0c;一个数据文件只可与一个表空间相联系&#xff0c;这是逻辑与物理…...

网站的开发和建设毕业论文/网络推广员怎么做

环境以及引用资料 1.windows server 2008 r2 enterprise &#xff08;木有办法&#xff0c;公司的服务器全是如此&#xff0c;就这种环境搭建吧&#xff09; 2.redis官方资料下载&#xff1a; https://redis.io/download 3.redis官方没有提供相关的程序包&#xff0c;但是Micr…...

动态网站具有哪些好处/网络营销与直播电商就业前景

《英语口语8000句完美版》根据日常生活最常用的句子&#xff0c;精选出了8000个句子&#xff0c;并按照用途和场合进行分类。真人男女同时发音&#xff0c;发音纯正&#xff0c;音质清晰&#xff0c;是一套不可多得的英语口语教材。√√标准发音英汉对照有声全文字典点读机《英…...

域名备案服务/搜狗seo怎么做

DelayQueue是一个延迟队列。在指定时间才能获取队列元素&#xff0c;队列头元素是即将过期的元素。 元素需要实现 Delayed 接口。该接口有两个抽象方法&#xff0c; getDelay(TimeUnit.NANOSECONDS)返回元素延迟时长.DelayQueue在取出元素后&#xff0c;会判断该方法返回是否…...

wordpress主题图片修改/介绍网络营销的短文

本来今年提前60天抢票以为可以抢到自己心仪的票&#xff0c;高高兴兴的回家去的&#xff0c;可是天不从人意&#xff0c;各种抢票软件都使用了还是没有抢到票&#xff0c;最后还是通过Q群的黄牛买到了票。 虽然最近12306发生的信息泄露问题&#xff0c;我也上去修改了密码&…...