SpringBoot使用AOP

Spring相信大家都学过,就不多述了。

自定义注解,注解的类中所有的接口都会执行AOP增强,注解的接口会执行AOP增强。

注解类:

package xin.students.examManagement.annotation.springConfiguration;import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;/*** 目标方法上添加@UserIfLogin注解,可以在AOP切面中进行拦截,并执行相应的登录验证逻辑* 这个类本身并不会直接执行任何登录验证逻辑,它只是作为一个标记,用于告诉AOP切面在哪些方法上应该执行登录验证*/
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface RequiresLogin {}

AOP增强类:

package xin.students.examManagement.Aspect;import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;/*** 验证是否登录的AOP*/
@Aspect
@Component
public class IfLoginAspect   {//这个切点表达式的作用是确定需要拦截和执行切面逻辑的方法,包括添加了@RequiresLogin注解的方法以及添加了@RequiresLogin注解的类的所有方法。        
@Before("@annotation(xin.students.examManagement.annotation.springConfiguration.RequiresLogin) || @within(xin.students.examManagement.annotation.springConfiguration.RequiresLogin)")public void validateLogin(JoinPoint joinPoint) {System.out.println("开始登录验证");}
}

SpringBoot主类:

@SpringBootApplication
@EnableAspectJAutoProxy  //开始AOP配置
@ComponentScan(basePackages = "xin.students.examManagement.*")
public class ExamManagementApplication {public static void main(String[] args) {SpringApplication.run(ExamManagementApplication.class, args);}
}

测试类:

package xin.students.examManagement.configuration;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import xin.students.examManagement.annotation.springConfiguration.RequiresLogin;@RestController
@RequiresLogin
public class TestController {@GetMapping("/secure-page")public String securePage() {// 这个方法需要登录验证return "Secure Page";}@GetMapping("/public-page")public String publicPage() {// 这个方法不需要登录验证return "Public Page";}
}

添加依赖!

<dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.7</version>
</dependency>
<dependency><groupId>org.aspectj</groupId><artifactId>aspectjrt</artifactId><version>1.9.7</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>5.3.13</version>
</dependency>

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

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

相关文章

ArcGis如何通过Python进行插件开发?

文章目录 0.引言1.准备Python加载项工具2.创建一个加载项工具3.编写代码4.生成安装文件5.安装和调出加载项6.使用加载项 0.引言 ArcGIS 插件&#xff08;Add-ins&#xff09;可以让用户更加容易的自定义和扩展ArcGIS Desktop应用程序&#xff0c;它创建一系列自定义工具提供了一…

simulink stateFlow流程图

基础 修改分支优先级 使用matlab workspace变量 例题 输出数组输入数组的平方 for循环 使用脚本的数值 实现数组索引

web安全php基础_php常量及可变变量(魔术变量)

常量 php中常量是一个简单值的标识符。该值在脚本中不能改变。 一个常量由英文字母、下划线、和数字组成,但数字不能作为首字母出现。 (常量名不需要加 $ 修饰符)。 常量有两点需要特别注意的地方 常量在整个脚本中都可以使用。常量值被定义后&#xff0c;在脚本的其他任何…

ELK实验部署过程

ELK集群部署环境准备 配置ELK日志分析系统 192.168.1.51 elk-node1 es、logstash、kibana 192.168.1.52 elk-node2 es、logstash 192.168.1.53 apache logstash &#xff08;我这里是把虚拟机的配置全部都改为2核3G的&#xff09; 2台linux 第1台&#xff1a;elk-nod…

【Vivado那些事儿】动态时钟的使用

时钟是每个 FPGA 设计的核心。如果我们正确地设计时钟架构、没有 CDC 问题并正确进行约束设计&#xff0c;就可以减少与工具斗争的时间。 但对于某些应用&#xff0c;我们希望能够更改某些IP中的时钟频率。其中一个例子是在图像处理管道中&#xff0c;输出分辨率可以动态变化&a…

PADS Layout中显示与布线标签页参数设置

1.“显示”标签页如图1 所示&#xff1a; 图1 显示标签页 显示标签页是用于去设置网络名以及管脚编号的字体大小的设置&#xff0c;建议是可以采取默认设置的&#xff0c;如果自己设计有另外要求&#xff0c;也是可以去进行设置。 2.“布线”标签也有三个子标签&#xff0c;首先…

【Python】使用pycharm结合gradio做一个web页面的demo

紧接上文我们安装好了python3.10&#xff0c;现在需要下载它的开发工具pycharm&#xff0c;我们在这里不过多赘述具体细节&#xff0c;仅简要说明关键步骤&#xff0c;来通过gradio体验一下示例demo 一、下载IDE pycharm官网&#xff1a;https://www.jetbrains.com.cn/pycharm…

选择排序、归并排序、快速排序

1.选择排序 选择排序算法的实现思路有点类似插入排序&#xff0c;也分已排序区间和未排序区间。但是选择排序每次会从未排序区间中找到最小的元素&#xff0c;将其放到已排序区间的末尾。 Java代码实现如下。 ps&#xff1a;选择排序的最好情况时间复杂度、最坏情况和平均情况…

PAX-DV-D24-1带升压双比例阀放大器

驱动比例流量阀、比例压力阀及泵、双比例控制阀&#xff1b; 双通道相互独立&#xff0c;PWM输出&#xff0c;发热小; 电流负反馈恒流输出&#xff0c;精密采样&#xff0c;温度漂移小于0.5%; 内部可选带升压&#xff0c;满足大阻抗线圈输出; 重复精度高&#xff0c;线性度…

Debezium系列之:基于debezium将mysql数据库数据更改流式传输到 Elasticsearch和PostgreSQL数据库

Debezium系列之&#xff1a;基于debezium将mysql数据库数据更改流式传输到 Elasticsearch和PostgreSQL数据库 一、背景二、技术路线三、配置四、从mysql同步数据到Elasticsearch和PostgreSQL数据库五、总结 一、背景 基于 Debezium 的端到端数据流用例&#xff0c;将数据流式传…

SpringMVC 中的视图如何渲染模型数据

SpringMVC 中的视图如何渲染模型数据 SpringMVC 是一个基于 Spring 框架的 Web 框架&#xff0c;它提供了一种方便的方式来处理 HTTP 请求和响应。在 SpringMVC 中&#xff0c;视图是用来渲染模型数据的组件&#xff0c;它们负责将模型数据转换为 HTML、JSON、XML 等格式的响应…

Flink DataStream之Union合并流

新建类 package test01;import jdk.nashorn.internal.runtime.regexp.joni.Config; import org.apache.flink.api.java.ExecutionEnvironment; import org.apache.flink.configuration.Configuration; import org.apache.flink.streaming.api.datastream.DataStream; import o…