如何处理session过期后的问题
首先新建servlet页面,删除所有内容,并实现Filter,实现原理,判断当前session是否为空,如果不是,继续跳转到应该跳转的页面,如果为空,跳转到登录页。
package com.lwk.servlet;
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.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
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();
//判断session是否过期
if (session.getAttribute("id") == null) {
String errors = "请重新登录!";
request.setAttribute("message", errors);
//跳转至登录页面
request.getRequestDispatcher("login.jsp").forward(request, response);
} else {
chain.doFilter(request, response);
}
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
}
第二步配置web.xml,其中url-pattern里面的servlet要写跳转的servlet,既你想在哪些页面验证session,session-timeout设置的是session的存活时间,这里设置的是60分钟。
<session-config>
<session-timeout>60</session-timeout>
</session-config>
<filter>
<filter-name>SessionFilter</filter-name>
<filter-class>com.lwk.servlet.SessionFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SessionFilter</filter-name>
<url-pattern>/CostServlet/*</url-pattern>
<url-pattern>/DrugServlet/*</url-pattern>
<url-pattern>/ItemServlet/*</url-pattern>
<url-pattern>/LiveServlet/*</url-pattern>
<url-pattern>/PrescriptionServlet/*</url-pattern>
<url-pattern>/TongServlet/*</url-pattern>
</filter-mapping>
附加:当session为空时,跳转到的是登录页面,但是无法跳出框架,会出现类似下图的情况(登录页面出现在框架里),这时候需要在登录页面的js中添加下面这句话就OK了。
if (window != top){
top.location.href = location.href;
}