使用自定义注解和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() {
相关文章:

使用自定义注解和AOP解决登录校验问题
1、如果每次都从Redis获取token,会有很多冗余代码 2、使用面向切面编程的思想 在不改变源代码或者很少改变源代码的情况下,增强类的某些方法。 在业务代码之前设置 切入点 创建切面类,也就是比如登录校验的某些公共方法 切面类从切入点切入流…...

【数据结构初阶】队列
hello! 目录 一、概念与结构 二、队列的实现 Queue.h Queue.c test.c 一、概念与结构 1、概念:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出的特性。 入队列:进行插入操作…...

《决胜B端 产品经理升级之路》 知识点总结
什么是b端产品? b端产品是指面向企业或组织的经营管理问题,旨在解决企业规模、成本、效率、品质和风控等方面的产品。这些产品主要帮助企业提高运营效率、降低成本、改善品质和控制风险等。b端产品适用于各种行业和企业类型,可以为企业带来深…...
2024年6月 青少年python一级等级考试真题试卷
202406 青少年软件编程等级考试Python一级真题 试卷总分数:100分 第 1 题 在使用turtle绘制图形时,如果要控制小海龟移动到 x 坐标为 200,y 坐标为150 的位置,以下代码能够实现效果的是?( ) …...
TCFormer:通过标记聚类Transformer实现视觉识别
摘要 Transformer在计算机视觉领域得到了广泛应用,并取得了显著成功。大多数最先进的方法将图像分割成规则网格,并用视觉标记表示每个网格区域。然而,固定的标记分布忽略了不同图像区域的语义含义,导致性能次优。为了解决这个问题…...

haproxy实现七层负载均衡详解(基本配置与算法)
目录 一、haproxy介绍 1.1 haproxy工作原理 1.2 相关配置类型 二、全局配置 2.1相关参数说明 2.2实验示例 实验环境: 2.2.1 设置多进程 2.2.2 设置日志显示 三、proxies代理配置 3.1 参数说明 3.2 default配置相关属性参数 3.2. 配置前端fronttend后端ba…...
海量日志数据收集监控平台应该怎么设计和实现
设计和实现一个海量日志数据收集和监控平台,需要考虑以下几个关键方面:数据采集、数据存储、实时处理、监控与告警、可视化分析、扩展性和高可用性。以下是一个详细的设计和实现方案: 1. 需求分析 日志来源:明确日志的来源&…...
Windows图形界面(GUI)-MFC-C/C++ - CSliderCtrl
公开视频 -> 链接点击跳转公开课程博客首页 -> 链接点击跳转博客主页 目录 CSliderCtrl 创建滑动条 设置滑动条属性 成员函数 消息处理 注意事项 示例代码 CSliderCtrl 创建滑动条 在对话框编辑器中,从工具箱中拖拽一个Slider Control到对话框…...

常见中间件漏洞复现之【WebLogic】!
Weblogic介绍 WebLogic是美国Oracle公司出品的⼀个application server,确切的说是⼀个基于JAVAEE架构的中间件,默认端⼝:7001 WebLogic是⽤于开发、集成、部署和管理⼤型分布式Web应⽤、⽹络应⽤和数据库应⽤的Java应⽤服务器。将Java的动态…...
Linux服务器中限制远程IP登录的深入指南
在当今的数字化时代,Linux服务器的安全性是企业和个人用户不可忽视的重要方面。远程登录,尤其是通过SSH(Secure Shell)协议,是服务器管理中最常见的操作之一。然而,不限制远程登录的IP地址可能会暴露服务器…...

卫星通信中的拥塞控制算法
结论:现有的Cubic和BBR2算法可直接用于卫星通信网络的拥塞控制中,专为卫星设置的拥塞控制算法目前没有集成到系统中,但各自的性能表现需要根据实测情况进行取舍。 TCP Hybla...

全网超详细haproxy七层代理
一:负载均衡 1、概念 负载均衡: Load Balance ,简称 LB ,是一种服务或基于硬件设备等实现的高可用反向代理技术, 负载均 衡将特定的业务(web 服务、网络流量等 ) 分担给指定的一个或多个后端特定的服务器或设 备&…...
Docker日志文件全局配置
这段配置是Docker容器的日志驱动配置,具体来说是json-file日志驱动的配置。这个配置的作用是定义容器日志文件的大小和数量限制。 {"log-driver": "json-file","log-opts": {"max-size": "500m","max-file…...

bia文件中码偏差对实时PPP解算分析
1. 码偏差对定位影响 码偏差对未知收敛时间有影响,对最终精度影响不大(权比1000:1)...

探索list与iterator的区别及yield的用法
1 问题 探索list与iterator的区别探索yield的用法 2 方法 通过网上学习后了解到 List返回的类型是list,list只会查询一级缓存。list()中返回的List中每个对象都是原本的对象。查询的时候没遍历一个对象会产生一条sql;而iterator这个迭代器返回的类型是it…...

github技巧和bug解决方法短篇收集
有一些几句话就可以说明白的观点或者解决的的问题,小虎单独收集到这里。 Commits没有算入每天的activity fork的仓库是不算的。 Commits made in a fork will not count toward your contributions. 参考: Contribution activity not shown for github…...

学习笔记五:在k8s中安装EFK组件(elasticsearch+fluentd+kibana)
在k8s 1.3安装EFK组件 前置条件上传压缩包安装nfs供应商创建nfs作为存储的供应商通过deployment创建pod用来运行nfs-provisioner 安装elasticsearch组件安装kibana组件安装fluentd组件 前置条件 查看k8s版本 kubectl get node -owide相关安装包 链接:https://pan.ba…...
Golang编译-如何忽略某些文件去编译
在 Go 语言中,编译好的二进制文件不会被再次加入到编译过程中。Go 编译器只会编译源代码文件(如 .go 文件),而不会将已经编译好的二进制文件(如可执行文件或静态库)作为输入来进行编译。 详细解释…...

有哪些适合中型企业的人力资源管理系统推荐?
本文主要介绍了以下几款人力资源管理系统:Moka、OrangeHRM、Verint、希沃人事、UKG Pro、大易Dayee、DingTalk、致远OA、卓望ShineHR、GoCo。 在选择人力资源管理系统时,中型企业面临着诸多挑战:如何确保系统既能满足现有需求,又能…...

活动回顾|首次 Cloudberry Database Meetup · 北京站成功举办
8 月 3 日,由酷克数据 HashData 主办的 Cloudberry Database Meetup 北京站活动圆满结束。本次 Meetup 以“以开源应对 Greenplum 闭源,原厂开发者再聚首”为主题,深入探讨了 Greenplum 闭源所带来的影响,并聚焦于 Cloudberry Dat…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...

2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
Docker拉取MySQL后数据库连接失败的解决方案
在使用Docker部署MySQL时,拉取并启动容器后,有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致,包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因,并提供解决方案。 一、确认MySQL容器的运行状态 …...

Matlab实现任意伪彩色图像可视化显示
Matlab实现任意伪彩色图像可视化显示 1、灰度原始图像2、RGB彩色原始图像 在科研研究中,如何展示好看的实验结果图像非常重要!!! 1、灰度原始图像 灰度图像每个像素点只有一个数值,代表该点的亮度(或…...
TJCTF 2025
还以为是天津的。这个比较容易,虽然绕了点弯,可还是把CP AK了,不过我会的别人也会,还是没啥名次。记录一下吧。 Crypto bacon-bits with open(flag.txt) as f: flag f.read().strip() with open(text.txt) as t: text t.read…...