写在前面
在网上搜了一天,结果居然没有发现什么太详细的spring boot中使用的aop教程,很多照着做了,结果都没有什么效果实现。。无奈,只能去查谷歌,翻官方文档了
附:Spring中aop的官方文档地址:https://docs.spring.io/spring/docs/5.0.12.BUILD-SNAPSHOT/spring-framework-reference/core.html#aop
Aop的说明
在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
环境说明
基于spring boot 2.0.4 jdk1.8 实现
接口测试工具:insomnia
事先声明:为了方便流程的演示,本文不涉及token的相关操作
若请求头带入携带id,则视为已登录。
角色信息,用head头的形式提交。
准备阶段
第一步,导入spring boot对spring aop的支持组件
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
此组件是基于spring boot自动配置的spring-boot-starter,可以无需配置文件,与spring boot集成
此外,有的人说直接导入aspectj包的,在这里说明一下,这个包是包含aspectj的,而且spring boot官方推荐使用此依赖来在spring boot中使用aop
第二步:构建Controller,提供入口点
@RestController
public class MyController {
@GetMapping("hello")
public String hello(Integer id, String name, Integer age) {
System.out.println("hello方法执行:id==>" + id + ",name==>" + name + ",age==>" + age);
return "hi~ 我不需要用户权限";
}
@GetMapping("user")
public String user(Integer id, String name, Integer age) {
System.out.println("user方法执行:id==>" + id + ",name==>" + name + ",age==>" + age);
return "hi~ 我需要登陆后才可以访问";
}
@GetMapping("admin")
public String admin(Integer id, String name, Integer age) {
System.out.println("admin方法执行:id==>" + id + ",name==>" + name + ",age==>" + age);
return "hi~ 我需要管理员身份才可以访问";
}
}
controller中为了提供了三个方法,分别是不需要具有权限、登陆即可访问、需要管理员角色才可以访问。
同时为了模拟实际操作,传入参数并执行方法。
测试访问:
准备阶段完毕。开始构建权限操作。
权限逻辑操作
第一步:构建注解类