springmvc Interceptor 的使用

拦截器它的主要作用是拦截用户的请求并进行相应的处理。在web应用中还是有很多场景需要使用到拦截器的(权限验证。。),spring mvc 的Interceptor跟struts2的Interceptor差不多

一、定义Interceptor实现类

   SpringMVC中的Interceptor拦截请求是通过HandlerInterceptor来实现的。在SpringMVC中定义一个Interceptor非常简单,主要有两种方式,第一种方式是要定义的Interceptor类要实现了Spring的HandlerInterceptor 接口,或者是这个类继承实现了HandlerInterceptor接口的类,比如Spring已经提供的实现了HandlerInterceptor接口的抽象类HandlerInterceptorAdapter ;第二种方式是实现Spring的WebRequestInterceptor接口,或者是继承实现了WebRequestInterceptor的类。


   SpringMVC的拦截器HandlerInterceptorAdapter对应提供了三个preHandle,postHandle,afterCompletion方法。preHandle在业务处理器处理请求之前被调用,
    postHandle在业务处理器处理请求执行完成后,生成视图之前执行,afterCompletion在DispatcherServlet完全处理完请求后被调用,可用于清理资源等 。所以要想实现自己的权限管理逻辑,需要继承HandlerInterceptorAdapter并重写其三个方法。

<!-- 配置拦截器 -->
	<mvc:interceptors>
		<mvc:interceptor>
			<!-- 拦截所有user的请求 -->
			<mvc:mapping path="/cart.html"/>
			<mvc:mapping path="/insertOrder.html"/>
			<mvc:mapping path="/updateState.html"/>
			<mvc:mapping path="/insertDiscuss.html"/>
			<bean class="com.daiingnan.interceptor.UserInterceptor"></bean><!--拦截器实现类-->
		</mvc:interceptor>
		<mvc:interceptor>
			<!-- 拦截座位选择-->
			<mvc:mapping path="/seat.html"/>
			<bean class="com.daiingnan.interceptor.SeatInterceptor"></bean>
		</mvc:interceptor>
		 <!-- 当设置多个拦截器时,先按顺序调用preHandle方法,然后逆序调用每个拦截器的postHandle和afterCompletion方法 --> 
		 
		<!-- mvc:interceptors下的拦截器默认拦截所有请求 
		<bean class="com.daiingnan.interceptor.UserInterceptor"></bean>-->
	</mvc:interceptors>
UserInterceptor拦截器是用来作为权限验证的

具体实现

public class UserInterceptor  implements HandlerInterceptor{
	
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		// TODO Auto-generated method stub
		User user = (User) request.getSession().getAttribute("user");
		if(user!=null){
			return true;
		}else{
			request.setAttribute("error", "您还未登录,请先登录!");
			request.getRequestDispatcher("/jsp/login.jsp").forward(request, response);
			return false;
		}
		
	}

	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		// TODO Auto-generated method stub
		
	}

	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		// TODO Auto-generated method stub
		
	}
	
}
拦截器放行返回true(与struts2不同,struts2通过调用invoke放行)

猜你喜欢

转载自blog.csdn.net/dailingnan0827/article/details/54929016