如何将重复方法封装为Aop切面并结合注解使用

首先要导入依赖
<dependency>
  <groupId>org.aspectj</groupId>
  <artifactId>aspectjweaver</artifactId>
</dependency>
编写注解
package com.yg.domain.note;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @NAME: TODO:MyErrorAop
 * @DATE: 2024/1/12
 * /✖◡✖\-  NoBug
 * @AUTHOR: Mr.zhou
 */

@Target(ElementType.METHOD)//可以用作于方法中
@Retention(RetentionPolicy.RUNTIME)//运行时使用
public @interface MyErrorAop {
}

编写Aop

package com.yg.common;

import com.yg.domain.SysYuangong;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.junit.platform.commons.util.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

/**
 * @NAME: TODO:MyErrorAop
 * @DATE: 2024/1/12
 * /✖◡✖\-  NoBug
 * @AUTHOR: Mr.zhou
 */
@Aspect
@Component
public class MyErrorAop {


    @Autowired
    RedisTemplate redisTemplate;
//    扫描目标类
    @Pointcut("@annotation(com.yg.domain.note.MyErrorAop)")
    public void myValid(){
    }


    //TODO:创建切面:防止重复提交
    @Around("myValid()")
    public Object MyAop(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {


//        获取实体类对象
        SysYuangong arg = (SysYuangong)proceedingJoinPoint.getArgs()[0];

//        判断校验字段是否为空
        if (StringUtils.isBlank(arg.getToken())){
            return ResultModel.error("没有有效token");
        }

//        从redis获取字段
        Boolean aBoolean = redisTemplate.hasKey(arg.getToken());
//        验证
        if (!aBoolean){
            return ResultModel.error("非法token  不能重复提交");
        }
//        执行后续方法
        Object proceed = proceedingJoinPoint.proceed(proceedingJoinPoint.getArgs());

//        删除校验字段
        redisTemplate.delete(arg.getToken());
        return proceed;
    }




}
方法上添加注解
 
然后测试就发现添加代码的方法都可以防止重复提交了!!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PyCharm连接服务器 - 2

文章目录 PyCharm连接服务器-21.如何连接服务器&#xff1f;2.如何在终端窗口打开SSH连接&#xff1f;3.Terminal终端出现中文乱码的解决办法&#xff1f;4.如何查看远程服务器的树目录结构&#xff1f;5.如何配置代码同步&#xff1f;6.如何为项目配置远程服务器中的python解释…

前端 TS 语法继承 多态 修饰符 readonly 抽象类 ts 基本写法 可选 剩余参数 函数重载 接口 类(3)

继承 继承之间的叫法 A类继承了B类&#xff0c;那么A类叫做子类&#xff0c;B类叫成基类 子类 ---》派生类 基类 ---》超类&#xff08;父类&#xff09; // 继承之间的叫法 // A类继承了B类&#xff0c;那么A类叫做子类&#xff0c;B类叫成基类 // 子类 ---》派生类 // 基类 …

【C++ 程序设计入门基础】- 第4节-函数

1、函数 函数是对实现某一功能的代码的模块化封装。 函数的定义&#xff1a; 标准函数&#xff1a; 输入 n 对整数的 a、b &#xff0c;输出它们的和。 #include <iostream> #include <windows.h> using namespace std;int add(int a,int b);//函数原型声明int…

ppt怎么录屏录音并且导出?好用录屏软件推荐

ppt已经成为了日常工作与学习中必不可少的工具&#xff0c;而ppt屏幕录制功能&#xff0c;可以方便用户将他人的演讲或视频中的内容记录下来&#xff0c;以便进一步学习与研究。录制ppt演示并将其导出为视频文件&#xff0c;可以帮助我们进行分享&#xff0c;但是很多人不知道p…

uniapp 制作 wgt 包(用于 app 的热更新)

升级版本号 修改 manifest.json 的配置&#xff0c;应用版本名称和应用版本号 必须高于上一版的值。 制作 wgt 包 发布 wgt 包 打开 uni-admin 项目的升级中心 上传后会自动生成下载链接 app 的静默热更新 发布新版后&#xff0c;用户打开app&#xff0c;后台会自动下载 wgt…

【NR技术】RRC状态转移以及RRC重建立过程

1 概述 本文介绍NR RRC状态转移的过程以及RRC重建立相关的过程。 2 RRC状态转移 2.1 RRC connected 态到 RRC inactive转移 RRC connected到RRC inactive state状态转换&#xff0c;gNB由gNB- cu和gNB- du (s)组成的场景下&#xff0c;如图1所示 图1 RRC connected to RRC …

odoo17基础培训1-odoo开发基础知识准备以及odoo17开发环境安装

odoo17基础培训 一、odoo开发基础知识准备以及odoo17开发环境安装 1、odoo是什么&#xff1f; 当我介绍客户使用odoo系统作为业务管理平台时&#xff0c;有时会被问到Odoo是什么&#xff1f; 简单点&#xff0c;可以这么说&#xff1a; Odoo是一套完整的系统&#xff0c;是…

强化学习(一)简介

强化学习这一概念在历史上来源于行为心理学&#xff0c;来描述生物为了趋利避害而改变自己行为的学习过程。人类学习的过程其实就是为达到某种目的不断地与环境进行互动试错&#xff0c;比如婴儿学习走路。强化学习算法探索了一种从交互中学习的计算方法。 1、强化学习 强化学…

ftp安装与配置 云服务器 CentOS7

1、FTP的安装 #安装 yum install -y vsftpd#设置开机启动 systemctl enable vsftpd.service#启动 systemctl start vsftpd.service#停止 systemctl stop vsftpd.service#查看状态 systemctl status vsftpd.service 2、配置FTP #修改前先进行备份文件 cp /etc/vsftpd/vsftpd…

SAP PI之MessageMapping

下图是ESR配置中各种对象的关联关系&#xff0c;注意OperationMapping和MessageMapping的方向性 MsgMapping是两个MassageType之间的关系&#xff0c;用于ServiceInterface的OperationMapping中发送和接收方在Request和Response结构之间的映射&#xff0c;如果ServiceInterface…

《SRE Google 运维解密》笔记

指导思想 介绍 Google 生产环境介绍 borg 是 k8s 的前身。 拥抱风险 服务质量 现在的 SLO 没有更细粒度的划分到季度 如果划分到季度&#xff0c;需要用这个数据来限制什么或者进行什么活动&#xff1f; L1S 链路的 SLA 的签署工作已经做了很多 对于 SLA 的达成情况数据没有…

代码随想录算法训练营第七天|哈希表理论基础,454.四数相加II ,383. 赎金信 ,15. 三数之和 ,18. 四数之和

刷题建议 刷题建议与debug 代码随想录目前基本都有了视频讲解&#xff0c;一定要先看视频&#xff0c;事半功倍。写博客&#xff0c;将自己的感悟沉淀下来&#xff0c;不然会忘大家提问的时候&#xff0c;记得要把问题描述清楚&#xff0c;自己在哪一步遇到了问题&#xff0c…

AWS EC2的SSM配置(AWS云中的跳板机)

问题 开发人员需要访问AWS云中私有子网的数据库服务等&#xff0c;都需要通过EC2进行SSH隧道代理。这里假设本地已经有一款稳定优秀的SSH客户端工具&#xff0c;并且假设已经会熟练使用SSH的隧道代理。 1.创建EC2 搜索找到EC2服务&#xff0c;如下图&#xff1a; 点击“启动…

Docker 配置国内镜像源加速

1. 国内镜像源总览 名称路径中国官方镜像https://registry.docker-cn.com网易163镜像http://hub-mirror.c.163.com中科大镜像https://docker.mirrors.ustc.edu.cn阿里云镜像https://[xxx].mirror.aliyuncs.com 2. 阿里云镜像源 地址&#xff1a;https://cr.console.aliyun.c…

【开源】基于JAVA+Vue+SpringBoot的校园电商物流云平台

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 商品数据模块2.3 快递公司模块2.4 物流订单模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 商品表3.2.2 快递公司表3.2.3 物流订单表 四、系统展示五、核心代码5.1 查询商品5.2 查询快递公司5.3 查…

PLSQL启动报错:Initialization error,不能初始化

出现场景&#xff1a;我这里原来有个旧版的PLSQL&#xff0c;想用新版的又装了个新版&#xff0c;启动的时候报错 解决办法 1.核对程序位数 第一个提示明显看到是和程序位数相关的&#xff0c;不管是32位还是64位要做到向匹配 2.设置oci.dll 第二个提示可以看到是和oci.dll…

jenkins环境搭建

jenkins环境搭建 1.环境说明2.环境准备1.jdk安装2.安装Git3.安装sshpass4.安装Maven 3.安装Jenkins(war包方式安装)1.安装2.镜像加速 4.官网提供的yum方式安装5.访问 1.环境说明 keyvalue环境centos7jdk版本11git2.43.0maven3.9.6jenkins最新版本http://mirrors.jenkins-ci.or…

(收藏)数据治理:一文讲透数据安全

数据治理&#xff1a;一文讲透数据安全 数据安全是数据治理的核心内容之一&#xff0c;随着数据治理的深入&#xff0c;我不断的碰到数据安全中的金发姑娘问题&#xff08;指安全和效率的平衡&#xff09;。 DAMA说&#xff0c;降低风险和促进业务增长是数据安全活动的主要…

【从零开始学习Java重要集合】深入解读ThreadLocal类

目录 前言&#xff1a; ThreadLocal&#xff1a; ThreadLocal的内部结构&#xff1a; ThreadLocal的常用方法&#xff1a; 1.set方法&#xff1a; 2.get方法&#xff1a; 3.setInitialValue方法 remove方法&#xff08;&#xff09;&#xff1a; ThreadLocalMap&…

第十二章 Java内存模型与线程(一)

文章目录 12.3 Java内存模型12.3.1 主内存与工作内存12.3.2 内存间交互操作小结12.3.3 对于volatile型变量的特殊规则12.3.5 原子性、可见性与有序性12.3.6 先行发生原则 12.3 Java内存模型 12.3.1 主内存与工作内存 1.Java 内存模型规定了所有的变量都存储在主内存&#xff…