day7:SpringMVC拦截器interceptor

SpeingMVC拦截器interceptor

拦截器(interceptor)的作用

Spring MVC 的拦截器类似于 Servlet 开发中的过滤器 Filter,用于对处理器进行预处理后处理,即对访问一些资源和方法时进行相应的干预。如未登录需要访问内部数据时,可以进行拦截并跳转到登录页面,可以使用拦截器来完成。
将拦截器按一定的顺序联结成一条链,这条链称为拦截器链(Interceptor Chain)。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。拦截器也是AOP思想的具体实现。

拦截器和过滤器区别

一般情况下,在Spring环境中我们都使用interceptor去完成,但是两种方式功能都是类型是的。

区别 过滤器(Filter) 拦截器(Interceptor)
使用范围 是 servlet 规范中的一部分,任何Java Web 工程都可以使用 是 SpringMVC 框架自己的,只有使用了SpringMVC 框架的工程才能用
拦截范围 在 url-pattern 中配置了/*之后,可以对所有要访问的资源拦截 中配置了/**之后,也可以多所有资源进行拦截,但是可以通过标签排除不需要拦截的资源

拦截器是快速入门

自定义拦截器很简单,只有如下三步:

① 创建拦截器类实现HandlerInterceptor接口,实现内部相应的方法
public class MyHandlerInterceptor1 implements HandlerInterceptor {
   
//没有需要我们实现的方法是因为在底层源码中已经帮我们覆盖好了,但是是空覆盖,没有作用,需要我们自己实现

    //在目标方法执行之前执行,这里的目标方法是show方法
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
   
		System.out.println("preHandle running...");
		return true;//如果返回true,代表放行,这里为false时,不放行,对访问进行拦截,默认为false
	}

	//在目标方法执行之后,视图返回之前执行
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
   
		System.out.println("postHandle running...");
		//这里的ModelAndView 参数可以修改视图和数据
		//modelAndView.addObject("name","lisi");
	}

	//在整个流程都执行完毕后执行
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
   
		System.out.println("afterCompletion running...");
	}
}
② 在spring-mvc.xml文件中配置拦截器


<mvc:interceptors>
	<mvc:interceptor

你可能感兴趣的:(java,servlet,spring,java,mvc)