Java实现自定义注解,实现不需要token 验证就可以访问接口

目录

  • 1 问题
  • 2 实现

1 问题

一个springboot 项目,需要token 验证,前端传过来token ,我们一般在项目全局写一个过滤器,去验证前端传过来的token ,如果有哪些接口不需要token验证,那么就排除这些接口,这个也需要配置。

但是这样就有一个问题,那就是不能一直配置不需要token验证的接口

所以现在我们就需要自定义一个注解,如果你认为哪个接口不需要token 验证就可以访问,那么就在这个接口上面写这个自定义的注解就可以了

2 实现

第一步,自定义一个注解

/*** 排除token 注解* */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ExcludeTokenValidation {
}

第二步,写一个过滤器


@Slf4j
@Component
public class AuthInterceptor implements HandlerInterceptor {private static final String TOKEN = "token";@Autowiredprivate RedisUtil redisUtil;@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException {if (handler instanceof HandlerMethod) {HandlerMethod handlerMethod = (HandlerMethod) handler;// 检查方法上是否有 @ExcludeTokenValidation 注解if (handlerMethod.hasMethodAnnotation(ExcludeTokenValidation.class)) {return true; // 如果有该注解,直接通过,不进行 token 验证}}String token = request.getHeader(TOKEN);// 从参数中获取tokenif (ObjectUtils.isEmpty(token)) {token = request.getParameter(TOKEN);}if (!ObjectUtils.isEmpty(token)){SysUser loginUser = getUser(token);UserContext.setUser(loginUser);} else{response.setStatus(HttpServletResponse.SC_FORBIDDEN);output(response, noPermissionMsg("没有对应权限,联系管理员"));return false;}return true;}@Overridepublic void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {//手动清除当前用户上下文的用户对象UserContext.remove();}@Overridepublic void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {}/*** 获取用户信息* @param token* @return*/private SysUser getUser(String token) {Object o = redisUtil.get(token);JSONObject userJson = JSONObject.parseObject(o.toString());SysUser sysUser = JSON.toJavaObject(userJson, SysUser.class);return sysUser;}/*** 响应体返回** @param response* @param result* @throws IOException*/private void output(HttpServletResponse response, Result<String> result) throws IOException {response.setContentType("application/json;charset=UTF-8");ServletOutputStream outputStream = null;try {outputStream = response.getOutputStream();outputStream.write(JSON.toJSONString(result).getBytes(StandardCharsets.UTF_8));} catch (IOException e) {e.printStackTrace();} finally {outputStream.flush();outputStream.close();}}/*** @param msg 消息信息* @return Result<T> 统一返回*/private Result<String> noPermissionMsg(String msg) {String code = String.valueOf(HttpServletResponse.SC_FORBIDDEN);Result<String> stringResult = ResultUtil.build(code, msg, null);return stringResult;}}

第三步,全剧配置 这个 过滤器

@Configuration
public class WebConfig implements WebMvcConfigurer {@BeanAuthInterceptor authlInterceptor() {return new AuthInterceptor();}@Overridepublic void addInterceptors(InterceptorRegistry registry) {List<String> urls = new ArrayList<>();urls.add("/favicon.ico");urls.add("**/swagger-ui.html");urls.add("/swagger-ui.html/**");registry.addInterceptor(authlInterceptor()).addPathPatterns("/**").excludePathPatterns(urls);}
}

第四部,在不想要token 验证的接口上面添加这个自定义注解
在这里插入图片描述
第五步,启动项目之后,访问这个接口就可以了

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

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

相关文章

前端 | TED打卡号分类查询

文章目录 &#x1f4da;实现效果&#x1f4da;模块实现解析&#x1f407;html&#x1f407;css&#x1f407;javascript &#x1f4da;实现效果 提供完整TED打卡号对应TED标题的查询列表 根据分类按需查询 &#x1f4da;模块实现解析 &#x1f407;html 搭框架<div cl…

Android Studio连接MySQL8.0

【序言】 移动平台这个课程要做一个app的课设&#xff0c;我打算后期增加功能改成毕设&#xff0c;就想要使用MySQL来作为数据库&#xff0c;相对于SQLlite来说&#xff0c;我更熟悉MySQL一点。 【遇到的问题】 一直无法连接上数据库&#xff0c;开始的时候查了很多资料&#…

海外云手机解决海外社交媒体运营难题

随着全球数字化浪潮的推进&#xff0c;海外社交媒体已成为外贸企业拓展市场、提升品牌影响力的重要阵地。Tiktok、Facebook、领英、twitter等平台以其庞大的用户基础和高度互动性&#xff0c;为企业提供了前所未有的营销机会。本文将介绍如何通过海外云手机&#xff0c;高效、快…

eNSP中小型园区网络拓扑搭建(下)

→b站直通车&#xff0c;感谢大佬← →eNSP中小型园区网络拓扑搭建&#xff08;上&#xff09;← 不带配置命令的拓扑图已上传~ 配置ospf SW5 # ospf 1 router-id 5.5.5.5area 0.0.0.0network 192.168.51.5 0.0.0.0network 192.168.52.5 0.0.0.0area 0.0.0.10network 192.1…

行业早报5.12

母亲节快乐&#xff01; 1.机构&#xff1a;美团旗下 KeeTa 已成为香港第一大外卖平台&#xff0c;单量份额超四成&#xff1b; 2.苹果公布 24Q1 财报&#xff1a;营收 907.5 亿美元&#xff0c;同比下降 4%&#xff1b;大中华区营收 163.7 亿美元&#xff0c;同比下降 8.1%&am…

MAC创建Pytorch环境

1.安装PyCharm,自己网上下载安装 2.安装miniconda,自己网上下载 3.随便在PyCharm创建个python项目 4.在项目下边的终端输入地方去配置python版本以及PyTorch 配置步骤: 1. 检测miniconda是否可用 输入 conda --version 查看 2 . conda search --full-name python 检测使用…

Kafka 面试题(七)

1. 描述Kafka Controller的作用&#xff1f; Kafka Controller在Kafka集群中扮演着核心管理和协调的角色。它的主要作用包括以下几个方面&#xff1a; 主题管理&#xff1a;Kafka Controller负责创建、删除以及增加主题分区等操作。当我们在任意一台Broker中执行kafka-topic脚…

有时你必须清理电脑上的灰尘,那么多久清理一次合理呢

灰尘的堆积几乎是所有电脑用户面临的问题。无论你的房间有多干净,或者你的电脑是否安装了灰尘过滤器,灰尘都会进入室内,但是你应该多久清理一次灰尘或怎么清理​灰尘呢? 你应该多久给电脑除尘一次 对于你应该多久清理一次电脑上的灰尘,没有硬性规定。这在很大程度上取决…

golang函数默认参数

和java和php等编程语言不通&#xff0c; go语言里面函数的形参是没有默认参数的&#xff0c; 而且在go语言里面函数是一种数据类型&#xff0c;这个和其他常见编程语言也是一个不同点。 虽然go没有默认参数&#xff0c;但是对于他的每个参数都一个默认的零值&#xff0c;数字…

elk + filebeat 8.4.3 收集nginx日志(docker部署)

ELK filebeat docker部署 一、 elasticsearch部署1、运行elasticsearch临时配置容器2、拷贝文件目录到本地3、检查elasticsearch.yml4、删除之前elastic&#xff0c;运行正式容器5、docker logs记录启动日志 二、部署kibana1、运行kibana临时配置容器2、docker拷贝配置文件到本…

数据链路层——计算机网络学习笔记三

使用点对点信道的数据链路层 前言&#xff1a; 1.数据链路层的重要性&#xff1a;网络中的主机、路由器都必须实现数据连输层&#xff1b; 2.数据链路层中使用的信道&#xff1a; 点对点信道&#xff1a;这种信道是一对一的通信方式&#xff1b; 广播信道&#xff1a;使用一对多…

硬盘架构原理及其算法RAID工作原理写惩罚

一、硬盘的架构以及寻址原理 硬盘工作原理&#xff1a; 硬盘寻址原理&#xff1a;逻辑顺序磁道、盘片、扇区&#xff08;顺序CHS&#xff09; 二、机械硬盘算法 读取算法 寻道算法 个人与企业适合的算法和寻道 个人使用的机械硬盘适合的寻道算法和读取算法是&#xff1a…

WPS表格:使用vlookup函数解决乱序数据对应问题

我们常常会遇到两个表格的内容相同&#xff0c;但是顺序不一致的情况。并且这种顺序无关于简单的排序&#xff0c;而是一种业务性很强的复杂排序规则。下面我举个例子&#xff0c;使用VLOOKUP复制数据。 假设太阳系行星举办了一次卖萌比赛&#xff0c;由太阳妈妈决定谁是最萌的…

ElasticSearch 8.X 源码导入idea并配置环境启动调试(mac环境)

主要是用于自己记录配置流程 环境 IntelliJ IDEA 2024.1.1 (Community Edition) jdk17&#xff08;可以安装jenv管理&#xff09; macos 14.4.1 gradle 8.5 资源准备 先在官网下载elasticsearch源码&#xff08;GitHub - elastic/elasticsearch: Free and Open, Distrib…

GeoServer安装以及部署

GeoServer介绍 GeoServer是一个开源的服务器软件&#xff0c;用于共享和编辑地理空间数据。它支持多种地理空间数据格式&#xff0c;并且可以发布为多种服务格式&#xff0c;如Web Feature Service (WFS)、Web Map Service (WMS)、Web Coverage Service (WCS)&#xff0c;以及…

SeetaFace6人脸特征提取与对比C++代码实现Demo

SeetaFace6包含人脸识别的基本能力&#xff1a;人脸检测、关键点定位、人脸识别&#xff0c;同时增加了活体检测、质量评估、年龄性别估计&#xff0c;并且顺应实际应用需求&#xff0c;开放口罩检测以及口罩佩戴场景下的人脸识别模型。 官网地址&#xff1a;https://github.co…

pyqt颜色变换动画效果

pyqt颜色变换动画效果 QPropertyAnimation介绍颜色变换效果代码 QPropertyAnimation介绍 QPropertyAnimation 是 PyQt中的一个类&#xff0c;它用于对 Qt 对象的属性进行动画处理。通过使用 QPropertyAnimation&#xff0c;你可以平滑地改变一个对象的属性值&#xff0c;例如窗…

Python-VBA函数之旅-str函数

目录 一、str函数的常见应用场景 二、str函数使用注意事项 三、如何用好str函数&#xff1f; 1、str函数&#xff1a; 1-1、Python&#xff1a; 1-2、VBA&#xff1a; 2、推荐阅读&#xff1a; 个人主页&#xff1a; https://myelsa1024.blog.csdn.net/ 一、str函数的常…

docker安装的es配置密码认证

docker安装的es配置密码认证 前言 ​ 今天客户提出来&#xff0c;说es的端口是暴露出来的&#xff0c;可以直接取出来数据&#xff0c;按照要求&#xff0c;必须对9200进行密码配置。准备好几种方案&#xff0c;nginx的反向代理加上认证配置&#xff08;但是是一个单体的服务…

Android WebSocket 使用指南:详细步骤与实践

WebSocket 是一种在单个长连接上进行全双工通信的协议。相比于传统的HTTP请求&#xff0c;WebSocket 可以减少通信的延迟&#xff0c;适用于需要实时数据传输的场景&#xff0c;如聊天应用、游戏和实时数据更新服务。在Android开发中&#xff0c;WebSocket的使用可以借助OkHttp…