1.背景
項目中有兩個系統,一個認證系統,一個入學系統,在認證系統中有個單獨做其他系統調用認證系統接口的模塊,記錄調用的接口url、時間、參數、ip等數據記錄在一張表中,以備以后的數據分析。
2.實現思路
在認證系統web.xml配置文件中,配置攔截指定的接口。
<!--認證系統,接口管理模塊攔截器 --> <filter> <filter-name>LogInterfaceFilter</filter-name> <filter-class>applice.filter.LogInterfaceFilter</filter-class> </filter> <filter-mapping> <filter-name>LogInterfaceFilter</filter-name> <url-pattern>/global/dataInterface/getTeacher.action</url-pattern> </filter-mapping>
在filter類中獲取request參數並存入接口管理表中
package applice.filter; import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.UUID; 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 com.google.gson.JsonArray; import com.google.gson.JsonObject; import core.hibernate.HibernateBean; import core.hibernate.HibernateBeanFactory;public class LogInterfaceFilter implements Filter{ @Override public void destroy() {} @Override public void doFilter(ServletRequest req, ServletResponse rep, FilterChain chain) throws IOException, ServletException { //頁面編碼為GBK,此處需要設置request的編碼與頁面編碼一致,否則會亂碼 req.setCharacterEncoding("GBK"); HttpServletRequest request=(HttpServletRequest)req; //獲取請求url String uri = request.getServletPath(); //獲取請求端ip,如果有代理服務器,此方法無法獲取到真實ip String ip = req.getRemoteAddr(); //公司框架封裝的hibernate HibernateBean bean = HibernateBeanFactory.createBean(); Map<String, Object> map = new HashMap<String, Object>(); String sql="insert into log_interface(logId,interface,logTime,param,appId,ip) values(:logId,:interface,NOW(),:param,:appId,:ip)"; map.put("logId", UUID.randomUUID().toString().replace("-", "")); map.put("interface", uri); map.put("ip", ip); if(!string.isEmpty(req.getParameter("tokenId"))){ String appId = (String)req.getServletContext().getAttribute(req.getParameter("tokenId")); if(!string.isEmpty(appId)){ map.put("appId", appId); }else{ map.put("appId", ""); } }else{ map.put("appId", req.getParameter("appId")); } //request.getParameterMap獲取請求參數Map集合 Map<String, String[]> param = req.getParameterMap(); //將請求參數通過jsonArray組裝,存入接口表的參數字段中 JsonArray arr = new JsonArray(); for (String k : param.keySet()) { JsonObject obj = new JsonObject(); if(!k.equals("pageNumber") && !k.equals("pageSize")){ obj.addProperty(k,param.get(k)[0]); arr.add(obj); } } map.put("param", arr.toString()); bean.executeUpdate(sql, map); chain.doFilter(req, rep); } @Override public void init(FilterConfig arg0) throws ServletException {} }