springmvc拦截器

引言

            合适的场景,使用合适的解决方案。

内容

            应用场景:用户信息一般都是放到session里面的,如果用户长时间没有操作,那么session就会失效,session失效后,如果用户再想操作,我们就需要让用户重新登录。

        解决思路:用户操作页面一般都是通过URL操作页面,所有只要能拦截住前端动作,然后重定向到登录页面即可。

        具体实例:

               1 springmvc 配置文件:一般情况下配置不需要拦截的.do操作即可,因为这些操作占少数,配置文件内容不需要配置太多。<bean>标签对应的是我们自定义的拦截器,通过实现HandlerInterceptor接口达到拦截目的。            

<!-- Session失效拦截 -->
<mvc:interceptors> 
    <!-- 定义拦截器 -->
     <mvc:interceptor>   
        <!-- 匹配的是url路径, 如果不配置或/**,将拦截所有的Controller --> 
        <mvc:mapping path="/**"/>
        <!-- 不需要拦截的地址 -->
        <!-- 登录操作 -->
		<mvc:exclude-mapping path="/portal/login.do" />  
        <mvc:exclude-mapping path="/taxinvoiceadmin/adminlogin.do" />
       <bean class="com.inspur.publics.sessionInterceptor"></bean>    
   </mvc:interceptor> 
</mvc:interceptors> 
               2 自定义拦截器类

package com.inspur.publics;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import com.inspur.taxinvoicebase.appframe.apputil.SessionUtil;

public class sessionInterceptor implements HandlerInterceptor {
	//private static final String LOGIN_URL="/index.jsp";
	public static  String uri = null;
	
	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		// TODO Auto-generated method stub
		
	}

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

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
		//获取session中的用户
		String userAccount = SessionUtil.getUserAccount();
		if(userAccount==null||"".equals(userAccount.toString())) {//判断session中是否存在用户信息
			//得到请求的uri
			uri = request.getRequestURL().toString();
			String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+"/";
			response.sendRedirect(basePath);
		}
		return true;
	}

}         

总结

           还有filter的拦截器也可以实现,不过静态文件的拦截就需要ajax的自定义拦截了,还在研究当中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值