问题描述:
项目中使用了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) == null
3) 在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>");
}
}
}
转载于:https://blog.51cto.com/langlichong/1730385