package com.yihu.base.filters; import java.io.IOException; import java.util.Enumeration; 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 net.sf.json.JSONObject; import com.yihu.base.ConfigUtil; import com.yihu.base.SessionBean; /** * 权限过滤 * * @author Administrator * */ public class ServerHitFilter implements Filter { public void destroy() { } /** * 过滤器 */ public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) req; long start=System.currentTimeMillis(); try{ chain.doFilter(req, res); }finally{ // saveServerHit(request,System.currentTimeMillis()-start); } } public void init(FilterConfig config) throws ServletException { //初始化异步rpc调用(如果再别的地方已经初始化,可以删除本行) try { } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 将访问日志发送给统一用户的网站统计系统 * @param request * @param mills */ public static void saveServerHit(HttpServletRequest request) { try { String userid = ""; String cname = ""; if (request.getSession() != null && request.getSession().getAttribute("session") != null) { SessionBean sessionBean = (SessionBean) request.getSession() .getAttribute("session"); userid = sessionBean.getOperatorId(); cname = sessionBean.getOperatorName(); } String url = request.getRequestURI(); if (url.endsWith(".js") || url.endsWith(".css") || url.endsWith(".jpg") || url.endsWith(".gif") || url.endsWith(".png")) { return; } String ip = getIpAddr(request); String reqParams = getAllParam(request); if (reqParams.length() > 2000) { reqParams = reqParams.substring(0, 2000);// 避免字段过长 } JSONObject params = new JSONObject(); params.put("userId", userid); params.put("cname", cname); params.put("url", url); params.put("other", reqParams); params.put("ip", ip); params.put("cname", cname); params.put("appUid", 1020); params.put("labelName", null); params.put("jd", 0); params.put("wd", 0); params.put("hb", 0); //TODO 保存操作日志 } catch (Exception e) { e.printStackTrace(); } } public static String getAllParam(HttpServletRequest request){ String result=""; try{ HttpServletRequest r=(HttpServletRequest)request; Enumeration paramsNames=r.getParameterNames(); while(paramsNames.hasMoreElements()){ String name=paramsNames.nextElement(); if(r.getParameterValues(name)!=null&&r.getParameterValues(name).length>1) result+=name+":"+r.getParameterValues(name).toString()+","; else if(r.getParameter(name)!=null){ result+=name+":"+r.getParameter(name)+","; } } }catch(Exception ex){ ex.printStackTrace(); } return result; } public static String getIpAddr(HttpServletRequest request) { String ip = request.getHeader("x-forwarded-for"); if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } return ip; } }