package com.app.mvc.acl.filter; import com.app.mvc.acl.dto.LoginUser; import com.app.mvc.acl.util.LoginUtil; import com.app.mvc.acl.util.RequestHolder; import com.app.mvc.util.IpUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; 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 java.io.IOException; import java.net.URLEncoder; /** * Created by jimin on 15/11/22. */ @Slf4j public class LoginFilter implements Filter { @Override public void init(FilterConfig config) throws ServletException { log.info("login filter init config"); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse resp = (HttpServletResponse) response; String servletPath = req.getServletPath(); String ip = IpUtil.getUserIP(req); LoginUser loginUser = LoginUtil.getUserFromCookie(req, resp); if (loginUser == null || !loginUser.isRet() || loginUser.getUser() == null) { String ret = req.getRequestURI(); String parameterString = req.getQueryString(); if (StringUtils.isNotBlank(parameterString)) { ret += "?" + parameterString; } log.info("cannot visit {}, param:{}, ip:{}, not login", servletPath, parameterString, ip); resp.sendRedirect("/signin.jsp?ret=" + URLEncoder.encode(ret)); return; } RequestHolder.add(loginUser.getUser()); RequestHolder.add(req); chain.doFilter(request, response); return; } @Override public void destroy() { log.info("login filter destroy"); } }