您的位置:首页 > Web前端 > JavaScript

Session监听(Action 、jsp过滤)

2015-12-31 14:20 691 查看
问题描述: 项目中使用了struts dwr spring ,利用filter过滤请求时发生问题: 1)如果filter配置为: /* 可以拦截action与jsp (但不符合需求) 2)filter配置为: *.jsp 与 *.action 时,实际是拦不住action解决方案: 实现一个类,继承拦截器实现filter=====================================Session过期判断: 1) Filter中 从session中获取某个值,不存在,则session过期,从而进行相应处理2) 利用session的方法: isNew()或者从request获取session:request.getSession(false) == null3) 在struts的拦截器中,可以直接判断session是否过期: ServletActionContext.getRequest().isRequestedSessionIdValid()
然后跳转到登录页面:拦截器中代码:
if(!ServletActionContext.getRequest().isRequestedSessionIdValid()){
//session过期,转向session过期提示页,最终跳转至登录页面
HttpServletResponse response = ServletActionContext.getResponse();
HttpServletRequest req = ServletActionContext.getRequest();
String location = req.getContextPath() + "/login.jsp";
//response.sendRedirect(location);
response.setContentType("text/html;charset=gb2312");
PrintWriter out = response.getWriter();
out.println("<script language='javascript' type='text/javascript'>");
out.println("alert('由于你长时间没有操作,导致Session失效!请你重新登录!');window.location.href='" + req.getContextPath() + "/login.jsp'");
out.println("</script>");
return null;
}

注意:拦截器的返回值是 与action的result一致的视图名,当然可以返回null .filter中代码:
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) arg0;
HttpServletResponse resp = (HttpServletResponse) arg1;
HttpSession session = req.getSession();
ServletContext sc=session.getServletContext();
String webapp = req.getContextPath();
OperatorBo operatorBo = (OperatorBo) session
.getAttribute(ConstCodeDef.KEY_SESSION_OPERATORBO);
String uri = req.getRequestURI();
if (operatorBo != null) {
arg2.doFilter(req, resp);

} else {
if (uri.endsWith("login.jsp")  || uri.endsWith("sale/") ) {
arg2.doFilter(req, resp);
}else if(uri.endsWith("manager/admin_index.jsp")){
arg2.doFilter(req, resp);
}else if(uri.endsWith("manager/admin_login.jsp")){
arg2.doFilter(req, resp);
}
else if(uri.contains("main.jsp") || uri.endsWith("main.jsp") || uri.endsWith("main.jsp/")){
resp.sendRedirect("/sale");
}else{
//resp.sendRedirect("login.jsp");
//arg2.doFilter(req, resp);
resp.setContentType("text/html;charset=gb2312");
PrintWriter out = resp.getWriter();
out.println("<script language='javascript' type='text/javascript'>");
out.println("alert('由于你长时间没有操作,导致Session失效!请你重新登录!');window.location.href='" + req.getContextPath() + "/login.jsp'");
out.println("</script>");

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: