需要用到的jar包:commons-lang3-3.1.jar
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
| package com.mju.zx.filter;
import java.io.IOException; import java.net.URLEncoder; import java.util.regex.Pattern;
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 org.apache.commons.lang3.StringUtils;
public class SessionFilter implements Filter {
private String sessionKey; private Pattern excepUrlPattern; private String forwardUrl;
@Override public void init(FilterConfig cfg) throws ServletException { sessionKey = cfg.getInitParameter("sessionKey");
String excepUrlRegex = cfg.getInitParameter("excepUrlRegex"); if (!StringUtils.isBlank(excepUrlRegex)) { excepUrlPattern = Pattern.compile(excepUrlRegex); }
forwardUrl = cfg.getInitParameter("forwardUrl"); }
@Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { if (StringUtils.isBlank(sessionKey)) { chain.doFilter(req, res); return; }
HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) res; String servletPath = request.getServletPath();
if (servletPath.equals(forwardUrl) || excepUrlPattern.matcher(servletPath).matches()) { chain.doFilter(req, res); return; }
Object sessionObj = request.getSession().getAttribute(sessionKey); if (sessionObj == null) { String contextPath = request.getContextPath(); String redirect = servletPath + "?" + StringUtils.defaultString(request.getQueryString());
response.sendRedirect(contextPath + StringUtils.defaultIfEmpty(forwardUrl, "/") + "?redirect=" + URLEncoder.encode(redirect, "UTF-8")); } else { chain.doFilter(req, res); } }
@Override public void destroy() { } }
|