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.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.lang3.StringUtils;
/**
* Servlet Filter implementation class LoginFilter
*/
public class LoginFilter implements Filter {
private static final String EXCEPT_URL = "EXCEPT_URL";
private String exceptUrl = null;
/**
* Default constructor.
*/
public LoginFilter() {
}
/**
* @see Filter#destroy()
*/
public void destroy() {
}
/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
String url=request.getRequestURI();
if (!request.getRequestURI().matches(exceptUrl) && !isLogin(request)) {
//response.addHeader(arg0, arg1);
processSessionTimeout(request, response);
return;
}
chain.doFilter(req, res);
}
/**
* @param request
* @param response
* @throws IOException
* @throws ServletException
*/
private void processSessionTimeout(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
if (isAjaxRequest(request) ) {
response.setHeader("sessionstatus","timeout");
} else {
response.setContentType("text/html");
response.getWriter().write("<script type='text/javascript'>alert('登录超时,请重新登录!');window.parent.location.href='"+Global.getConfig("login.url")+"';</script>");
// response.sendRedirect(ConfigUtils.get("login.url"));
}
}
/**
* @param request
* @return
*/
private boolean isLogin(HttpServletRequest request) {
HttpSession session = request.getSession();
return null != session.getAttribute("employee");
}
/**
* @param request
* @return
*/
private boolean isAjaxRequest(HttpServletRequest request) {
return StringUtils.isNotEmpty(request.getHeader("x-requested-with")) &&
StringUtils.equalsIgnoreCase(request.getHeader("x-requested-with"), "XMLHttpRequest");
}
/**
*
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
//exceptUrl = "^".concat(fConfig.getServletContext().getContextPath()).concat(StringUtils.defaultIfEmpty(fConfig.getInitParameter(EXCEPT_URL), ""));
exceptUrl = fConfig.getInitParameter(EXCEPT_URL);
}
}