常用用于实现拦截的有:Filter、HandlerInterceptor、MethodInterceptor

第一种Filter属于Servlet提供的,后两者是spring提供的,HandlerInterceptor属于Spring MVC项目提供的,用来拦截请求,在MethodInterceptor之前执行。
实现一个HandlerInterceptor可以实现接口HandlerInterceptor,也可以继承HandlerInterceptorAdapter类,两种方法一样。这个不在本文范围,具体使用之前已经写过SpringBoot的(SpringMVC的使用一样,区别只是配置)
MethodInterceptor是AOP项目中的拦截器,它拦截的目标是方法,即使不是Controller中的方法。
实现MethodInterceptor拦截器大致也分为两种,一种是实现MethodInterceptor接口,另一种利用Aspect的注解或配置。
关于实现MethodInterceptor接口的这种方法,还需要在配置文件中做配置,在SpringMVC中使用还可以,在SpringBoot中使用起来似乎没有那么方便。
本文主要还是说Aspect注解方式,个人觉得这种方法才比较灵活,与配置与工程整个代码都没有耦合(你添加一个类,做几个注解就可以用了,无需在其他地方再做什么),更易应用。
首先为你的SpringBoot项目添加maven依赖,让其支持aop(其实就是自动引入aop需要的一些jar)
在pom.xml中添加依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency>
然后创建Aspect测试类:
package com.shanhy.sboot.aop;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
@Aspect // FOR AOP
@Order(-99) // 控制多个Aspect的执行顺序,越小越先执行
@Component
public class TestAspect {
@Before("@annotation(test)")// 拦截被TestAnnotation注解的方法;如果你需要拦截指定package指定规则名称的方法,可以使用表达式execution(...),具体百度一下资料一大堆
public void beforeTest(JoinPoint point, TestAnnotation test) throws Throwable {
System.out.println("beforeTest:" + test.name());
}
@After("@annotation(test)")
public void afterTest(JoinPoint point, TestAnnotation test) {
System.out.println("afterTest:" + test.name());
}
}
这样就完成了,然后创建一个Controller验证一下:
@RestController
@RequestMapping("/test")
public class TestController {
@TestAnnotation(name="abc")
@RequestMapping("/show")
public String show() {
return "OK";
}
@RequestMapping("/show2")
public String show2() {
return "OK2";
}
}
此时我们访问show请求,就会被拦截,控制台会打印输出。如果请求show2则不会被拦截。
注意:
1、在application.properties中也不需要添加spring.aop.auto=true,因为这个默认就是true,值为true就是启用@EnableAspectJAutoProxy注解了。
2、你不需要手工添加 @EnableAspectJAutoProxy 注解。
3、当你需要使用CGLIB来实现AOP的时候,需要配置spring.aop.proxy-target-class=true,这个默认值是false,不然默认使用的是标准Java的实现。
其实aspectj的拦截器会被解析成AOP中的advice,最终被适配成MethodInterceptor,这些都是Spring自动完成的,如果你有兴趣,详细的过程请参考springAOP的实现。
关于集中拦截方法的区别总结:
HandlerInterceptoer拦截的是请求地址,所以针对请求地址做一些验证、预处理等操作比较合适。当你需要统计请求的响应时间时MethodInterceptor将不太容易做到,因为它可能跨越很多方法或者只涉及到已经定义好的方法中一部分代码。
MethodInterceptor利用的是AOP的实现机制,在本文中只说明了使用方式,关于原理和机制方面介绍的比较少,因为要说清楚这些需要讲出AOP的相当一部分内容。在对一些普通的方法上的拦截HandlerInterceptoer就无能为力了,这时候只能利用AOP的MethodInterceptor。
Filter是Servlet规范规定的,不属于spring框架,也是用于请求的拦截。但是它适合更粗粒度的拦截,在请求前后做一些编解码处理、日志记录等。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# spring
# boot
# aspect
# SpringBoot
# aop
# 拦截注解
# spring boot如何通过自定义注解和AOP拦截指定的请求
# Springboot中使用Redisson+AOP+自定义注解实现访问限流与黑名单拦截
# SpringBoot中利用AOP和拦截器实现自定义注解
# spring 重复注解和aop拦截的实现示例
# SpringAop拦截参数带注解的方法
# 的是
# 如果你
# 两种
# 当你
# 拦截器
# 几个
# 就会
# 这种方法
# 还可以
# 多个
# 不太
# 不需要
# 你不
# 要在
# 用了
# 有兴趣
# 是说
# 因为它
# 可以使用
# 在对
相关文章:
建站之家VIP精选网站模板与SEO优化教程整合指南
如何通过老薛主机一键快速建站?
如何用PHP工具快速搭建高效网站?
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
创业网站制作流程,创业网站可靠吗?
广东专业制作网站有哪些,广东省能源集团有限公司官网?
C++如何编写函数模板?(泛型编程入门)
,怎么用自己头像做动态表情包?
如何在阿里云通过域名搭建网站?
如何在云主机快速搭建网站站点?
c# Task.ConfigureAwait(true) 在什么场景下是必须的
枣阳网站制作,阳新火车站打的到仙岛湖多少钱?
如何在Golang中使用encoding/gob序列化对象_存储和传输数据
建站VPS能否同时实现高效与安全翻墙?
如何通过多用户协作模板快速搭建高效企业网站?
如何在腾讯云免费申请建站?
建站之星如何修改网站生成路径?
公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?
如何用好域名打造高点击率的自主建站?
,南京靠谱的征婚网站?
定制建站价位费用解析与套餐推荐全攻略
香港服务器选型指南:免备案配置与高效建站方案解析
h5网站制作工具有哪些,h5页面制作工具有哪些?
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
宝塔面板如何快速创建新站点?
制作网站的过程怎么写,用凡科建站如何制作自己的网站?
道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?
如何在IIS7上新建站点并设置安全权限?
Swift开发中switch语句值绑定模式
香港服务器网站卡顿?如何解决网络延迟与负载问题?
高防服务器如何保障网站安全无虞?
深圳企业网站制作设计,在深圳如何网上全流程注册公司?
临沂网站制作公司有哪些,临沂第四中学官网?
导航网站建站方案与优化指南:一站式高效搭建技巧解析
宝塔建站无法访问?如何排查配置与端口问题?
如何安全更换建站之星模板并保留数据?
C++时间戳转换成日期时间的步骤和示例代码
小程序网站制作需要准备什么资料,如何制作小程序?
海南网站制作公司有哪些,海口网是哪家的?
网站制作知乎推荐,想做自己的网站用什么工具比较好?
如何解决ASP生成WAP建站中文乱码问题?
如何在建站宝盒中设置产品搜索功能?
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
定制建站方案优化指南:企业官网开发与建站费用解析
如何选择服务器才能高效搭建专属网站?
如何在IIS中配置站点IP、端口及主机头?
如何在服务器上三步完成建站并提升流量?
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
如何在阿里云ECS服务器部署织梦CMS网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。