引言
合适的场景,使用合适的解决方案。
内容
应用场景:用户信息一般都是放到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的自定义拦截了,还在研究当中。