spring mvc 拦截器打印详细的请求参数信息


	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
		// 所有请求第一个进入的方法
		String reqURL = request.getRequestURL().toString();
	    String ip = request.getRemoteHost ();
	    
		InputStream  is = request.getInputStream ();
	    StringBuilder responseStrBuilder = new StringBuilder ();
	    BufferedReader streamReader = new BufferedReader (new InputStreamReader (is,"UTF-8"));
	    String inputStr;
	     while ((inputStr = streamReader.readLine ()) != null)
         responseStrBuilder.append (inputStr);
//	     System.out.println("请求参数: " + responseStrBuilder.toString ());
	     String parmeter = responseStrBuilder.toString();
	     
	   long startTime = System.currentTimeMillis();
       request.setAttribute("startTime", startTime);
       if (handler instanceof HandlerMethod) {
           StringBuilder sb = new StringBuilder(1000);
           sb.append("-----------------------").append(MiscUtil.getDateTimeString()).append("-------------------------------------\n");
           HandlerMethod h = (HandlerMethod) handler;
		   //Controller 的包名
           sb.append("Controller: ").append(h.getBean().getClass().getName()).append("\n");
		   //方法名称
           sb.append("Method    : ").append(h.getMethod().getName()).append("\n");
		   //请求方式  post\put\get 等等
           sb.append("RequestMethod    : ").append(request.getMethod()).append("\n");
		   //所有的请求参数
           sb.append("Params    : ").append(parmeter).append("\n");
		   //部分请求链接
           sb.append("URI       : ").append(request.getRequestURI()).append("\n");
		    //完整的请求链接
           sb.append("AllURI    : ").append(reqURL).append("\n");
		   //请求方的 ip地址
           sb.append("request IP: ").append(ip).append("\n");
           logger.info(sb.toString());
           
       }
//       修改request中的参数并保存到request中 
       request.setAttribute("parmeter_json", parmeter); 
        
	return true;
	}

这里有的问题是request 只能被读一次 第二次去读取将拿不到里面的内容

解决方法是:向request 在写入一个对象 将所有的参数都写进去


打印的日志如下:

Controller: com.cms.controller.testController
Method    : playList
RequestMethod    : POST
Params    : {     "param": {        "page_num": "1",        "page_size": "20"         }}
URI       : /cms-api/test/online_play_list/1
AllURI    : http://localhost:8080/cms-api/test/online_play_list/1
request IP: 0:0:0:0:0:0:0:1




你可能感兴趣的:(spring mvc 拦截器打印详细的请求参数信息)