使用自定义注解和AOP解决登录校验问题

1、如果每次都从Redis获取token,会有很多冗余代码

2、使用面向切面编程的思想

在不改变源代码或者很少改变源代码的情况下,增强类的某些方法。

在业务代码之前设置 切入点 

创建切面类,也就是比如登录校验的某些公共方法

切面类从切入点切入流程,形成切面

 

 2.1、创建注解

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyLogin {}

2.2、创建切面类

进行token校验

/*** 切面类* @Author 伊人秋采唐* @Date 2024/8/10*/
@Component //交给spring管理
@Aspect  //切面类  标识这是一个切面类
public class MyLoginAspect {@Autowiredprivate RedisTemplate redisTemplate;//环绕通知,登录判断 Around//切入点表达式:指定对哪些规则的方法进行增强@Around("execution(* com.example.*.controller.*.*(..)) && @annotation(MyLogin)")public Object login(ProceedingJoinPoint proceedingJoinPoint, MyLogin myLogin)  throws Throwable {//1 获取request对象RequestAttributes attributes = RequestContextHolder.getRequestAttributes();//Spring提供的工具类ServletRequestAttributes sra = (ServletRequestAttributes)attributes;assert sra != null;HttpServletRequest request = sra.getRequest();//2 从请求头获取tokenString token = request.getHeader("token");//3 判断token是否为空,如果为空,返回登录提示if(!StringUtils.hasText(token)) {throw new MyException("");}//4 token不为空,查询redisString customerId = (String)redisTemplate.opsForValue().get(RedisConstant.USER_LOGIN_KEY_PREFIX+token);//5 查询redis对应用户id,把用户id放到ThreadLocal里面if(StringUtils.hasText(customerId)) {AuthContextHolder.setUserId(Long.parseLong(customerId));}//6 执行业务方法return proceedingJoinPoint.proceed();}}

2.3、使用注解标识

表示这是一个切入点,在执行此方法之前,先执行切面方法

    @MyLogin@GetMapping("/getCustomerLoginInfo")public Result getCustomerLoginInfo() {

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

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

相关文章

json配置文件读入redis - 包含命令行解析示例

需要的取用,也是笔记,python argv经常会需要解析。类linux的命令行参数处理,这也是一个示例。 1.源码 #!/usr/bin/env python3 # -*- coding: utf-8 -*- # 获取当前脚本文件所在目录的父目录,并构建相对路径 import os import …

【C语言篇】深入理解指针1

文章目录 内存和地址内存编址 指针变量和地址取地址操作符指针变量和解引用操作符指针变量指针变量类型解引用操作符指针变量的大小 指针变量类型的意义指针的解引用指针-整数void*指针 const修饰指针指针运算指针-整数指针-指针指针的关系运算 野指针野指针成因如何规避野指针…

嵌入式人工智能ESP32(2-GPIO之LED与按键)

1、ESP32引脚 ESP32 38脚与30脚的主要区别在于引脚数量和功能。‌选择38脚的ESP32开发板通常能提供更多的功能和更好的扩展性,‌适合需要连接多种传感器和外设以及进行复杂通信的应用。‌而30脚的ESP32开发板则可能更适合简单应用或成本敏感的项目。 SP32的引脚图…

STM32 | SPI+flash闪存(第十一天)W25Q128举例

点击上方"蓝字"关注我们 01、SPI 1.1 SPI概念理解 SPI 是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。SPI 接口主要应用在 EEPROM,FLASH,实时时钟,AD 转换器,还有数字信号处理器和数…

MySQL笔记-基础篇(二):多表查询

​ 博客主页: 南来_北往 系列专栏:Spring Boot实战 前言 MySQL的多表查询是一项非常实用的数据库操作技术,它能够通过关联不同表中的数据来提供更加丰富和准确的信息。在实际应用中,数据通常不是孤立存在的,而是分布在多个…

Ubuntu(20.04)云主机SSH安全加固

1、新增SSH服务端口 #vim /etc/ssh/sshd_config 找到 #Port 22 去掉注释符,下面添加:Port [新端口] 2、本地防火墙放通 #ufw allow [新端口] #ufw reload //防火墙重新加载 #ufw status verbose //查询是否开放SSH新端口 3、腾讯云防火墙配…

提高PDF电子书的分辨率

解决方法出处 1. 安装ImageMagick brew install imagemagick brew install ghostscript2. 按流程进行 convert -density 600 your_pdf_filename.pdf output-%02d.jpg convert output*.jpg -normalize -threshold 80% final-%02d.jpg convert final*.jpg my_new_highcontras…

长语境窗口扩展:LongRoPE技术解析

人工智能咨询培训老师叶梓 转载标明出处 由于大模型高昂的微调成本、长文本的稀缺性,以及新引入的标记位置可能导致的灾难性值,目前扩展的语境窗口通常被限制在大约128k标记。为了克服这些限制,微软研究院的研究团队提出了一种名为LongRoPE的…

Apache OFBiz 曝出严重漏洞,允许预身份验证 RCE

近日,研究人员发现 Apache OFBiz 中存在一个新的关键漏洞,该漏洞是 Apache OFBiz 中的一个错误授权问题,被追踪为CVE-2024-38856。该漏洞影响 18.12.14 之前的版本,18.12.15 版本解决了该漏洞。 SonicWall 的安全研究员 Hasib Vh…

C语言常用的字符串函数(含模拟实现)

在使用C语言编写代码的时候,我们经常会用到一些库函数来实现一些平常难以实现的功能,今天我就为大家来分享一些我经常会用到的库函数,并且也会将他们的用法和部分的模拟实现函数分享给大家~ (文中部分图片来取自strlen - C Refer…

优购电商小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,商品分类管理,商品信息管理,留言板管理,订单管理,系统管理 微信端账号功能包括:系统首页,商品信息&#xf…

音频进阶学习一——模拟信号和数字信号

文章目录 前言|版本声明:山河君,未经博主允许,禁止转载 一、什么是模拟信号和数字信号信号模拟信号数字信号数字和模拟信号的区别一览 二、信号处理系统总结 前言 所有软件的运行都得益于硬件上的突破,数字信号是从40年前就开始高…

Qt 实战(9)窗体 | 9.2、QDialog

文章目录 一、QDialog1、基本概念2、常用特性2.1、模态与非模态2.2、数据交互 3、总结 前言: Qt框架中的QDialog类是一个功能强大且灵活的对话框控件,广泛应用于各种GUI(图形用户界面)应用程序中,用于处理用户输入、消…

2024年4月份我放弃了前端,转行了!!!猜我得到了什么?

为什么离开这个行业?最近在干什么? 为什么离开这个行业这个问题其实 我真的真的想了很多很多,我也分享给你们我的想法,希望可以帮助想继续深耕这个行业的继续深耕,犹豫想转行的帮助你们确定转行。 我能干什么&#x…

开源 AI 智能名片 S2B2C 商城小程序赋能下的社区团购商业模式研究

摘要:本文深入探讨了社区团购商业模式的本质、特点及其优势,并详细分析了开源 AI 智能名片 S2B2C 商城小程序在社区团购中的应用与价值。通过对相关案例的研究和数据的分析,揭示了这一创新组合对社区商业生态的重要影响,为未来社区…

FFmpeg开发笔记(四十五)使用SRT Streamer开启APP直播推流

FFmpeg开发笔记(四十五)使用SRT Streamer开启APP直播推流 合集 - FFmpeg开发实战(46) 1.FFmpeg开发笔记(一)搭建Linux系统的开发环境2023-04-162.FFmpeg开发笔记(二)搭建Windows系统的开发环境2023-04-29…

深入探索 Wireshark——网络封包分析的利器

一、引言 在当今数字化的时代,网络通信变得日益复杂和关键。无论是企业的网络运维,还是网络安全研究,都需要深入了解网络中传输的数据。Wireshark 作为一款强大的网络封包分析工具,成为了网络工程师、安全研究人员和技术爱好者不…

8.6-设置mysql开机自启+角色生效+主从数据库

一、设置mysql开机自启 1.添加开机自启 #添加开机启动 [root004 mysql]# #systemctl enable mysqld [root004 mysql]# chkconfig --list注:该输出结果只显示 SysV 服务,并不包含 原生 systemd 服务。SysV 配置数据 可能被原生 systemd 配置覆盖。 要列…

【C语言】位段详解

🦄个人主页:小米里的大麦-CSDN博客 🎏所属专栏:https://blog.csdn.net/huangcancan666/category_12718530.html 🎁代码托管:黄灿灿 (huang-cancan-xbc) - Gitee.com ⚙️操作环境:Visual Studio 2022 目录 一、什么是位段? 二、…

Leetcode面试经典150题-2.两数相加

解法都在代码里,不懂就留言或者私信 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode next) { this.val …