这段时间给给一个国企做一个项目,由于项目是之前的前人搭建的,比较古老,后来我们接手了。由于底层搭建的比较简单,当session过期的时候提交数据的时候可能出现脏数据,因为找出来一个合理的解决办法,就是拦截器过滤器解决session过期问题。分为两步:
1. 增加过滤器。
package com.yl.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebFilter(filterName = "SessionFilter", urlPatterns = "/*")
public class SessionFilter implements Filter {
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
HttpSession session = request.getSession();
String dlmc = (String) request.getSession().getAttribute("dlmc");
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
String servletPath = httpServletRequest.getServletPath(); // 获取客户端所请求的脚本文件的文件路径
// 不过滤处理登录页面、JS和CSS文件
if (!servletPath.equals("/login")&&!servletPath.endsWith("/login.jsp") && !servletPath.endsWith(".js") && !servletPath.endsWith(".css")&& !servletPath.endsWith(".jpg")&& !servletPath.endsWith(".png")) {
if (org.apache.commons.lang.xwork.StringUtils.isEmpty(dlmc)) {
request.getRequestDispatcher("/admin/admin/index/login.jsp").forward(request, response);
} else {
chain.doFilter(request, response);
}
}else{
chain.doFilter(request, response);
}
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
}
2. 登录界面也要加一些东西,否则的话,在界面框架中,当有session过期时候,菜单栏目没有退出,只有中间部分的内容退出。我们需要的是全部退出到登录界面,所以需要增加一些内容。
if (window != top){
top.location.href = location.href;
}
增登录界面的head里边增加这些内容。