Java interceptor拦截器的方法

网友投稿 325 2022-08-31


Java interceptor拦截器的方法

拦截器的概念

java里的拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者在一个Action执行的前后执行一段代码,也可以在一个Action执行前阻止其执行,同时也提供了一种可以提取Action中可重用部分代码的方式。在AOP中,拦截器用于在某个方法或者字段被访问之前,进行拦截。然后再之前或者之后加入某些操作。目前,我们需要掌握的主要是Spring的拦截器,Struts2的拦截器不用深究,知道即可。

拦截器的原理

大部分时候,拦截器方法都是通过代理的方式来调用的。Struts2的拦截器实现相对简单。当请求到达Struts2的ServletDispatcher时,Struts2会查找配置文件,并根据配置实例化相对的拦截器对象,然后串成一个列表(List),最后一个一个的调用列表中的拦截器。Struts2的拦截器是可插拔的,拦截器是AOP的一个实现。Struts2拦截器栈就是将拦截器按一定的顺序连接成一条链。在访问被拦截的方法或者字段时,Struts2拦截器链中的拦截器就会按照之前定义的顺序进行调http://用。

1. 编写拦截器组件,实现 HandlerInterceptor 接口

注意此接口中的方法使用了Java新特性 default 默认已实现了接口方法

顾在Idea中Alt+Enter快捷键无法弹出实现的窗口,可以通过 Ctrl+O 快捷键选择重写的接口

@Component

public class MyInterceptor implements HandlerInterceptor {

@Override

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

System.out.println("======preHandle=========");

//return HandlerInterceptor.super.preHandle(request, response, handler);

return true;

}

public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

System.out.println("======postHandle=========");

HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);

public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

System.out.println("======afterCompletion=========");

HandlerInterceptor.super.afterCompletion(request, response, handler, ex);

}

2. 编写配置组件,实现接口 WebMvcConfigurer

同样它默认实现了接口,顾使用Ctrl+O 来选择要重新的接口

@Configuration

public class MyInterceptorConfiguration implements WebMvcConfigurer

{

@Autowired

MyInterceptor interceptor;

@Override

public void addInterceptors(InterceptorRegistry registry) {

registry.addInterceptor(interceptor).addPathPatterns("/**/getall");

WebMvcConfigurer.super.addInterceptors(registry);

}

}

知识点:addPathPatterns():

/**     - /**: 匹配所有路径     - /admin/**:匹配 /admin/ 下的所有路径     - /secure/*:只匹配 /secure/user,不匹配 /secure/user/info */拦截效果如图:

过滤器、拦截器、AOP的区别

过滤器

过滤器可以拦截到方法的请求和响应(ServletRequest request, SetvletResponse response),并对请求响应做出响应的过滤操作,比如设置字符编码、鉴权操作。

拦截器

拦截器可以在方法之前(preHandle)和方法执行之后(afterCompletion)进行操作,回调操作(postHandle),可以获取执行的方法的名称,请求(HttpServletRequest)。

AOP切片

AOP操作可以对操作进行横向的拦截,最大的优势在于可以获取执行方法的参数,对方法进行统一的处理,常见使用日志,事务,请求参数安全验证等。

顺序

请求->>过滤器->>拦截器-->Aspect->>拦截器->>过滤器->>响应


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:pycharm之激活(pycharm永久激活(含激活码))
下一篇:如何优雅地进行接口管理?2022年国内15 个好用的 API 接口管理神器分享
相关文章

 发表评论

暂时没有评论,来抢沙发吧~