昨天,我写了关于我在学习java过滤器过滤器的过程中得到的心得。 感兴趣的朋友可以参考:3359 blog.csdn.net/QQ _ 43019156/article/details/120163368欢迎交流哦~
就像学习java过滤器过程一样,要学习java拦截器,首先,java拦截器是java拦截器Interceptor
JVA阻止程序(也称为Interceptor )动态阻止操作调用的对象。 AVA阻止程序提供了一种允许开发人员在阻止的操作执行之前和之后执行代码以及在执行此操作之前阻止执行的机制。 更重要的是,它提供了一种可以在此操作中检索可重用代码的方法。 面向断开的编程(拦截器通常用于在某个方法或字段被访问之前拦截它,可以在访问之前或之后添加一些我们定制的操作。 目前,我们需要掌握的是spring拦截器。 知道struts拦截器就好了。 其次是java拦截器的应用场景拦截器简介
应用场景1、日志记录可以记录为了信息监视、信息统计等而请求信息的日志。 2、权限检查:检测登录时,访问处理器检测有无登录,未直接返回登录页面时。 3、性能监测:典型为慢日志。 接下来分析一下拦截器的工作原理。个字符很多,耐心点~~1 ) pre handle (httpservletrequestrequest,http servlet response,Object handle )方法,BMD dle sprirequest 每个Interceptor调用都是按声明顺序执行的,第一个执行的是Interceptor中的preHandle方法,因此可以在此方法中执行预初始化操作、预处理当前请求,以及确定是否继续请求此方法的返回值是布尔值Boolean类型,返回false表示请求将终止,后续的Interceptor和Controller将不再运行。 如果返回值为true,则继续调用以下Interceptor pre handle方法;如果已经是最后一个interceptor,则调用当前请求的控制器方法: )2) posthandle (httpservletrequestrequest,HttpServletResponse response,Object handle,ModelAndView modelAndView )方法, 从preHandle方法的说明中可以看到,该方法还包含afterCompletion方法(如下所述),并且只有在当前所属Interceptor的preHandle方法的返回值为true时才调用。 postHandle方法,bmdbg在处理当前请求后执行,也就是在调用控制器方法后执行,但在dispatcher servlet返回视图并呈现之前调用,因此在此方法中cocotion postHandle方法的调用方向与preHandle相反。 也就是说,之前声明的interceptor posthandle方法反而在之后执行。 这与Struts2的Interceptor的运行进程稍有不同。 Struts2中的Interceptor运行进程也是链式的。 但是,在Struts2中,可以手动调用ActionInvocation的invoke方法来启动对下一个Interceptor或Action的调用, 必须在每个Interceptor上调用invoke方法之前启动内容)3) after completion (httpservletrequestrequest,HttpServletResponse response 在整个请求完成后,即dispatcher servlet渲染相应的视图后,将执行此方法。 该方法的主要作用是用于资源的整理工作。 现在就做! 创建实现HandlerInterceptor接口的MyInterceptor类即可
@别忘了@Component评论哦!
package com.itg zw.learn interceptor.interceptor; importorg.spring framework.stereotype.com ponent; importorg.spring framework.web.servlet.handler interceptor; import org.springframew
ork.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * @title: MyInterceptor * @Author Mr.Guo * @Date: 2021/9/1 14:27 * @Version 1.0 */@Componentpublic class MyInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("preHandle......"); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("postHandle......"); HandlerInterceptor.super.postHandle(request, response, handler, modelAndView); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("afterCompletion......"); HandlerInterceptor.super.afterCompletion(request, response, handler, ex); }}接着在spring中注册我们的拦截器
别忘了@Configuration注解哟!
如果想对某些特殊的请求不进行拦截
可以使用excludePathPatterns()方法