Spring MVC 4的Interceptor拦截器与Struts2的拦截器相似,其主要目的是对全部的URL请求进行拦截处理,处理某些规则的请求,如权限验证,判断用户是否登录等。
在Spring MVC 4中使用拦截器,必须先在Spring.xml中配置使用拦截器,配置的方法有两种:一种是传统的bean方式配置,另一种是使用 http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd 定义的<mvc:interceptors>。具体实现代码以下:
方案一:使用bean配置interceptors拦截器
web
<beans> <bean id="handlerMapping" class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"> <property name="interceptors"> <list> <ref bean="loginInterceptor"/> </list> </property> </bean> <bean id="loginInterceptor" class="com.favccxx.favblog.interceptor.LoginInterceptor"> </bean> <beans> |
<mvc:interceptors> <mvc:interceptor> <!-- 默认全部的请求都进行拦截 --> <mvc:mapping path="/*"/> <bean class="com.favccxx.favblog.interceptor.LoginInterceptor"></bean> </mvc:interceptor> </mvc:interceptors> |
public class LoginInterceptor implements HandlerInterceptor { public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // TODO Auto-generated method stub System.out.println("------" + System.nanoTime()); return true; } public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { // TODO Auto-generated method stub } public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { FavUser favUser = (FavUser) (request.getSession()).getAttribute(SysConstants.USER_SESSION_KEY); if (favUser == null) { modelAndView.setViewName("redirect:/login"); } }} |