springmvc拦截器的使用

定义一个拦截类

package com.xiaoxin.demo.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class HandlerInterceptor1 implements HandlerInterceptor{

	  /** 
     * 该方法也是需要当前对应的Interceptor的preHandle方法的返回值为true时才会执行。该方法将在整个请求完成之后,也就是DispatcherServlet渲染了视图执行, 
     * 这个方法的主要作用是用于清理资源的,当然这个方法也只能在当前这个Interceptor的preHandle方法的返回值为true时才会执行。 
     */
	   //应用场景:统一异常处理,统一日志处理
	@Override
	public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
			throws Exception {
		// TODO Auto-generated method stub
	     System.out.println("afterCompletion");
		
	}
	   /** 
     * 这个方法只会在当前这个Interceptor的preHandle方法返回值为true的时候才会执行。
     * postHandle是进行处理器拦截用的,它的执行时间是在处理器进行处理之 
     * 后,也就是在Controller的方法调用之后执行,但是它会在DispatcherServlet
     * 进行视图的渲染之前执行,也就是说在这个方法中你可以对ModelAndView进行操 
     * 作。这个方法的链式结构跟正常访问的方向是相反的,也就是说先声明的Interceptor
     * 拦截器该方法反而会后调用
     */  
	//应用场景从modelAndView出发:将公用的模型数据(比如菜单导航)在这里传到视图,
	//也可以在这里统一指定视图

	@Override
	public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
			throws Exception {
		// TODO Auto-generated method stub
		 System.out.println("postHandle");
		
	}
	   /** 
     * preHandle方法是进行处理器拦截用的,顾名思义,该方法将在Controller处理之前进行调用,SpringMVC中的Interceptor拦截器是链式的,可以同时存在 
     * 多个Interceptor,然后SpringMVC会根据声明的前后顺序一个接一个的执行,而且所有的Interceptor中的preHandle方法都会在 
     * Controller方法调用之前调用。SpringMVC的这种Interceptor链式结构也是可以进行中断的,这种中断方式是令preHandle的返 
     * 回值为false,当preHandle的返回值为false的时候整个请求就结束了。 
     */ 
	//比如身份认证,如果认证通过表示当前用户没有登陆,需要此方法拦截不再向下执行
	@Override
	public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
		// TODO Auto-generated method stub
		 System.out.println("preHandle");
		return true;
	}

}

将拦截类注册到springmvc中去

 <mvc:interceptors>
    <mvc:interceptor>
        <!-- /**表示所有url包括子url路径 -->
        <mvc:mapping path="/**"/>
        <bean class="com.xiaoxin.demo.interceptor.HandlerInterceptor1"></bean>
    </mvc:interceptor>
   </mvc:interceptors>

访问http://localhost:8080/springmvctest/sendSpringmvc/view

后台输出打印:

preHandle
进来了
postHandle
afterCompletion

基本的使用就是这样在拦截器中我们可以完成一些拦截,例如我们可以解决乱码问题,比如我们可以解决登陆权限问题

拦截器链的执行顺序例如有拦截器A,拦截器B,它们的执行顺序是

A.preHandle如果为true执行B.preHandle为true执行控制器的业务逻辑在返回modelAndView之前执行B.postHandle在执行A.postHandle在执行B.afterCompletion在执行A.afterCompletion

拦截器类还可以实现WebRequestInterceptor

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值