springmvc拦截器配置

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. }  
/**
 * 处理session超时的拦截器
 */
public class SessionTimeoutInterceptor  implements HandlerInterceptor{
    
	public String[] allowUrls;//还没发现可以直接配置不拦截的资源,所以在代码里面来排除
	
	public void setAllowUrls(String[] allowUrls) {
		this.allowUrls = allowUrls;
	}

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
			Object arg2) throws Exception {
		String requestUrl = request.getRequestURI().replace(request.getContextPath(), "");  
		System.out.println(requestUrl);
		if(null != allowUrls && allowUrls.length>=1)
			for(String url : allowUrls) {  
				if(requestUrl.contains(url)) {  
					return true;  
				}  
			}
		
		User user = (User) request.getSession().getAttribute("user");
		if(user != null) {  
			return true;  //返回true,则这个方面调用后会接着调用postHandle(),  afterCompletion()
		}else{
			// 未登录  跳转到登录页面
			throw new SessionTimeoutException();//返回到配置文件中定义的路径
		}
	}
	
	@Override
	public void afterCompletion(HttpServletRequest arg0,
			HttpServletResponse arg1, Object arg2, Exception arg3)
			throws Exception {
	}

	@Override
	public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,
			Object arg2, ModelAndView arg3) throws Exception {
	}

}


Java代码   收藏代码
  1. 另外,你要在controller中设置session的超时时间  
  2. request.getSession().setMaxInactiveInterval(20);//20秒  
  3. request.getSession().setAttribute("user", user);  
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值