package project.web.admin.filter; import java.io.IOException; import java.util.ArrayList; import java.util.Date; import java.util.Enumeration; import java.util.List; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.context.ContextLoader; import org.springframework.web.context.WebApplicationContext; import kernel.util.DateUtils; import kernel.util.StringUtils; import kernel.web.PageActionSupport; import project.syspara.Syspara; import project.syspara.SysparaService; import security.SecUser; import security.SecurityAppUserHolder; import security.SecurityContext; import security.internal.SecUserService; import util.IpUtil; public class AllRequestFilter extends PageActionSupport implements Filter { private Logger logger = LoggerFactory.getLogger(AllRequestFilter.class); /** * url 白名单 */ private List urls = new ArrayList(); /** * 操作不打日志url */ private List opNoLogUrls = new ArrayList(); @Override public void destroy() { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException { ServletRequest oldRequest = request; ServletResponse oldResponse = response; HttpServletRequest httpServletRequest = (HttpServletRequest)request; WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext(); SysparaService sysparaService =(SysparaService) wac.getBean("sysparaService"); // 检查IP黑名单 Syspara blackListSyspara = sysparaService.find("blacklist_ip"); String requestIP = this.getIp(httpServletRequest); if(blackListSyspara != null && !StringUtils.isEmptyString(blackListSyspara.getValue())) { if (!checkBlackListIP(blackListSyspara.getValue(), requestIP)) { logger.error("黑名单IP,参数{}", requestIP); return; } } String ip = this.getIp(httpServletRequest); if (!IpUtil.isCorrectIpRegular(ip)) { logger.error("校验IP不合法,参数{}", ip); return; } // 白名单直接过滤,非action请求直接过滤 String servletPath = httpServletRequest.getServletPath(); if(urls.contains(servletPath) || !".action".equals(servletPath.substring(servletPath.length()-7))) { filterChain.doFilter(oldRequest, oldResponse); return; } SecUserService secUserService =(SecUserService) wac.getBean("secUserService"); Syspara syspara = sysparaService.find("filter_ip"); String usernameLogin = getUsername_login(httpServletRequest); if(StringUtils.isEmptyString(usernameLogin)) {//未登录时不操作 filterChain.doFilter(oldRequest, oldResponse); return; } SecUser secUser = secUserService.findUserByLoginName(usernameLogin); if(!StringUtils.isEmptyString(secUser.getPartyId())) {//代理商不验证 filterChain.doFilter(oldRequest, oldResponse); return; } if(syspara != null && !StringUtils.isEmptyString(syspara.getValue())) { checkIP(syspara,request); } Syspara para = sysparaService.find("open_google_auth_code"); if (null == para || para.getValue().equals("true")) { if(checkOperaIp(httpServletRequest, response, secUser)) { // 不记录日志直接返回 if(opNoLogUrls.contains(httpServletRequest.getServletPath())) { return ; } RequestDispatcher requestDispatcher = request.getRequestDispatcher("/include/google_auth_code.jsp"); request.setAttribute("check_opera_ip", "ture"); request.setAttribute("username", getUsername_login(httpServletRequest)); requestDispatcher.forward(request, response); return; } } if (checkParameter(httpServletRequest)) { return; } filterChain.doFilter(oldRequest, oldResponse); } /** * 请求参数中包含"script"的过滤 */ private boolean checkParameter(HttpServletRequest request) { Enumeration enu = request.getParameterNames(); while (enu.hasMoreElements()) { String paraName = (String) enu.nextElement(); String value = request.getParameter(paraName).toLowerCase(); if (value.indexOf("script") != -1) { System.out.println("请求参数中包含script的过滤,参数:" + request.getParameter(paraName) + "请求地址:" + request.getServletPath()); return true; } } Enumeration heads = request.getHeaderNames(); while (heads.hasMoreElements()) { String headName = String.valueOf(heads.nextElement()); String value = request.getHeader(headName).toLowerCase(); if (value.indexOf("