SpringMVC(九)拦截器

拦截器

拦截器的原理和过滤器相同。
SpringMVC:要想实现拦截器,必须实现一个接口HandlerInterceptor

a.编写拦截器implements HandlerInterceptor

public class MyInterceptor  implements HandlerInterceptor{

    //请求前拦截
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
        Object user = request.getSession().getAttribute(Global.USER_SESSION_KEY);
        if (user == null) {
          System.out.println("尚未登录,调到登录页面");
          response.sendRedirect("/loginpage.html");
          return false;
        }

        return true;//true:拦截操作之后,放行 ;false:拦截之后不放行,请求终止;
	}

    //响应前拦截
	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		System.out.println("拦截响应");
	}

  	//渲染前拦截  
	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		System.out.println("视图(jsp)被渲染完毕");
	}

}

b.配置:将自己写的拦截器 配置到springmvc中(spring)

	<!-- 将拦截器 配置到springmvc中(spring);默认拦截全部请求 -->
	<mvc:interceptors>	
			<!-- 配置具体的拦截路径 -->
			<mvc:interceptor>
				<!-- 指定拦截的路径,基于ant风格 -->
				<mvc:mapping path="/**"/>  
				<!-- 指定拦不截的路径 -->
				<mvc:exclude-mapping path="/handler/testUpload"/> 
				<bean  class="org.lanqiao.interceptor.MyInterceptor"></bean>
			</mvc:interceptor>
			
				<!-- 配置具体的拦截路径 -->
			<mvc:interceptor>
				<!-- 指定拦截的路径,基于ant风格 -->
				<mvc:mapping path="/**"/>  
				<!-- 指定不拦截的路径 -->
				<mvc:exclude-mapping path="/handler/testUpload"/> 
				<bean  class="org.lanqiao.interceptor.MySecondInterceptor"></bean>
			</mvc:interceptor>
	</mvc:interceptors>
	<!-- 将拦截器配置到springmvc中-->
	<mvc:interceptors>	
			<!-- 配置具体的拦截路径 -->
			<mvc:interceptor>
				<!-- 指定拦截的路径,基于ant风格 -->
				<mvc:mapping path="/**"/>  
				<!-- 指定拦不截的路径 -->
				<mvc:exclude-mapping path="/api/v1/login"/> 
				<bean  class="uitil.LoginFilter"></bean>
			</mvc:interceptor>
	</mvc:interceptors>

如果有多个拦截器,则每个拦截器的preHandle postHandle 都会在相应时机各被触发一次;但是afterCompletion, 只会执行最后一个拦截器的该方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值