> 文章列表 > AOP<2>:SpringBoot 统一功能处理,AOP实战

AOP<2>:SpringBoot 统一功能处理,AOP实战

AOP<2>:SpringBoot 统一功能处理,AOP实战


目录

前言

一、统一用户登录权限验证(拦截)

使用Spring 拦截器

1.实现一个普通拦截器

2.将拦截器添加到配置文件中,并设置拦截规则

二、web层添加统一请求前缀

直接重写configurePathMatch()方法

 直接在配置文件中进行配置

三、统一异常处理

1.创建一个类,并在类上标注 @ControllerAdvice注解

2.添加方法 @ExceptionHandler来订阅异常

四、统一数据返回

1.为什么要有统一的数据返回?

2.统一数据返回的实现 @ControllerAdvice + ResponseBodyAdvice

总结


前言

上一篇博客我们学习了Spring AOP的基础和使用,那么这节课的SpringBoot的统一处理功能其实就是AOP思想的运用,可以当做是AOP的实战

任务:

  1. 统一用户登录权限验证(拦截)
  2. 统一数据格式返回
  3. 统一异常处理

一、统一用户登录权限验证(拦截)

学习了Spring AOP之后,可以通过Spring AOP的前置通知环绕通知来实现,但是在实现过程中我们仍然会有两个问题:

  1. 没办法获取到HttpSession对象
  2. 实际开发,拦截一部分方法,一部分不拦截,这样的切点定义规则很难

如何解决这两个问题呢?我们可以使用Spring的拦截器!

使用Spring 拦截器

1.实现一个普通拦截器

2.将拦截器添加到配置文件中,并设置拦截规则

  • addPathPatterns:表示需要拦截的URL,**表示拦截任意方法(也就是所有方法)
  • excludePathPatterns:表示需要排除的URL。

拦截器的实现原理

没有加拦截器的时候:

  • 用户调用后端→Controller(控制器层)→Service(服务层)→Mapper(数据持久层)→数据库

加上拦截器:

  • 用户调用后端→拦截器→Controller(控制器层)→Service(服务层)→Mapper(数据持久层)→数据库

其实就是 在用户调用Controller的方法之前,拦截器进行预处理,符合条件才会进ontr层的方法。

其实就是相当于

二、web层添加统一请求前缀

为什么要设置统一的访问前缀?

通常一台服务器,会放多个服务,但是只有一个开放端口80,这时候就要根据请求设置前缀来访问服务器。可以直接设置统一的前缀,而不用在每个controller层都加

直接重写configurePathMatch()方法

重写这个方法之后,我们就需要在controller设置的url的基础上在加上 /liming 才能访问

 直接在配置文件中进行配置

三、统一异常处理

1.创建一个类,并在类上标注 @ControllerAdvice注解

2.添加方法 @ExceptionHandler来订阅异常

四、统一数据返回

1.为什么要有统一的数据返回?

统一数据返回格式的优点有很多,如:

  1. 便前端程序员更好的接收和解析后端数据接口返回的数据。
  2. 降低前端程序员和后端程序员的沟通成本,按照某个格式实现就行了
  3. 有利于项目统一数据的维护和修改。
  4. 有利于后端技术部们的统一规范的标准制定,不会出现稀奇古怪的返回内容。

2.统一数据返回的实现 @ControllerAdvice + ResponseBodyAdvice


总结

  • 统一用户登录权限的效验使用WebMvcConfigurer + HandlerInterceptor来实现 统一异常处理
  • 使用@ControllerAdvice + @ExceptionHandler来实现 统一返回值处理
  • 使用@ControllerAdvice + ResponseBodyAdvice 来处理