springmvc拦截器配置

来源:互联网 发布:vb数值转字符串 编辑:程序博客网 时间:2024/05/02 01:14
Spring mvc 拦截器 配置心得

session超过时间自动跳转到登录页面。要求请求的每个url都要进行拦截,当然,js,css这些东西除外。

spring-mvc.xml
Xml代码  收藏代码
  1. <!-- 拦截器配置 -->  
  2.     <mvc:interceptors>  
  3.       <!-- session超时 -->  
  4.       <mvc:interceptor>  
  5.         <mvc:mapping path="/*/*"/>  
  6.         <bean class="com.ziyou.platform.interceptor.SessionTimeoutInterceptor">  
  7.           <property name="allowUrls">  
  8.             <list>  
  9.               <!-- 如果请求中包含以下路径,则不进行拦截 -->  
  10.               <value>/login</value>  
  11.               <value>/js</value>  
  12.               <value>/css</value>  
  13.               <value>/image</value>  
  14.               <value>/images</value>  
  15.             </list>  
  16.           </property>  
  17.         </bean>  
  18.       </mvc:interceptor>  
  19.     </mvc:interceptors>  
  20.       
  21.     <!-- 自定义异常处理,SimpleMappingExceptionResolver这个类可以是个空类,但是要写,方便在java代码里面使用 -->  
  22.     <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">  
  23.       <property name="exceptionMappings">  
  24.         <props>  
  25.           <prop key="com.ziyou.platform.interceptor.SessionTimeoutException">redirect:/login</prop>  
  26.         </props>  
  27.       </property>  
  28.     </bean>  

Java代码  收藏代码
  1. /** 
  2.  * 处理session超时的拦截器 
  3.  */  
  4. public class SessionTimeoutInterceptor  implements HandlerInterceptor{  
  5.       
  6.     public String[] allowUrls;//还没发现可以直接配置不拦截的资源,所以在代码里面来排除  
  7.       
  8.     public void setAllowUrls(String[] allowUrls) {  
  9.         this.allowUrls = allowUrls;  
  10.     }  
  11.   
  12.     @Override  
  13.     public boolean preHandle(HttpServletRequest request, HttpServletResponse response,  
  14.             Object arg2) throws Exception {  
  15.         String requestUrl = request.getRequestURI().replace(request.getContextPath(), "");    
  16.         System.out.println(requestUrl);  
  17.         if(null != allowUrls && allowUrls.length>=1)  
  18.             for(String url : allowUrls) {    
  19.                 if(requestUrl.contains(url)) {    
  20.                     return true;    
  21.                 }    
  22.             }  
  23.           
  24.         User user = (User) request.getSession().getAttribute("user");  
  25.         if(user != null) {    
  26.             return true;  //返回true,则这个方面调用后会接着调用postHandle(),  afterCompletion()  
  27.         }else{  
  28.             // 未登录  跳转到登录页面  
  29.             throw new SessionTimeoutException();//返回到配置文件中定义的路径  
  30.         }  
  31.     }  
  32.       
  33.     @Override  
  34.     public void afterCompletion(HttpServletRequest arg0,  
  35.             HttpServletResponse arg1, Object arg2, Exception arg3)  
  36.             throws Exception {  
  37.     }  
  38.   
  39.     @Override  
  40.     public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,  
  41.             Object arg2, ModelAndView arg3) throws Exception {  
  42.     }  
  43.   
  44. }  


Java代码  收藏代码
  1. 另外,你要在controller中设置session的超时时间  
  2. request.getSession().setMaxInactiveInterval(20);//20秒  
  3. request.getSession().setAttribute("user", user);  
0 0