packagecom.quyiyuan.openplatform.filter;importjava.io.IOException;importjava.util.UUID;importjavax.servlet.Filter;importjavax.servlet.FilterChain;importjavax.servlet.FilterConfig;importjavax.servlet.ServletContext;importjavax.servlet.ServletException;importjavax.servlet.ServletRequest;importjavax.servlet.ServletResponse;importjavax.servlet.http.HttpServletRequest;importorg.springframework.web.context.WebApplicationContext;importcom.quyiyuan.openplatform.service.MonitorService;/***
* 任务:
* 描述:(存储用户请求信息,过滤器类)
* 作者:
* 时间:2015年11月5日下午12:03:33
* 类名: SaveRequestInfoFilter
*
*/public class SaveRequestInfoFilter implementsFilter{privateServletContext servletContext;
@Overridepublic voiddestroy() {
}
@Overridepublic voiddoFilter(ServletRequest sreq, ServletResponse srsp,
FilterChain fc)throwsIOException, ServletException {
HttpServletRequest request=(HttpServletRequest) sreq;
String method=request.getMethod();
StringBuffer URL=request.getRequestURL();if(URL.toString().contains("ROPcloudtest.html") || URL.toString().contains("ROPtest.html")|| URL.toString().contains("ROP/css") || URL.toString().contains("ROP/js")|| URL.toString().contains("YYSK.html")){
fc.doFilter(sreq, srsp);
}else{
String URI= "";
String urlParame= "";
String jsonParame= "";
String token= request.getParameter("token");
String userSource= request.getParameter("userSource");
String publicServiceType= request.getParameter("publicServiceType");//request 作用域中添加UUID,标记当前请求
String uuid = UUID.randomUUID().toString().replaceAll("-", "");
request.setAttribute("UUID", uuid);if (method.equals("POST")) {
URI=request.getRequestURI();
urlParame=request.getQueryString();//获取自定义装饰类对象
BodyReaderHttpServletRequestWrapper bodyWrapper = newBodyReaderHttpServletRequestWrapper(request);
jsonParame=HttpHelper.getBodyString(bodyWrapper);
saveReqInfo(URI, urlParame, jsonParame, token, userSource, publicServiceType, uuid);//使用自定义装饰类对象执行下一个过滤器
fc.doFilter(bodyWrapper, srsp);
}else{
URI=request.getRequestURI();
urlParame=request.getQueryString();
saveReqInfo(URI, urlParame, jsonParame, token, userSource, publicServiceType, uuid);
fc.doFilter(request, srsp);
}
}
}
@Overridepublic void init(FilterConfig config) throwsServletException {
servletContext=config.getServletContext();
}/***
* 任务:
* 描述: 调用业务类保存请求信息
* 作者:
* 时间:2015年11月5日下午12:04:09
*@paramURI
*@paramurlParame
*@paramjsonParame
* returnType:void
*
*@parampublicServiceType
*@paramuserSource
*@paramtoken
*@paramuuid*/
private void saveReqInfo(final String URI, final String urlParame, final String jsonParame, finalString token,final String userSource, final String publicServiceType, finalString uuid) {
Thread saveReqInfo= newThread() {public voidrun() {//获取容器对象
WebApplicationContext context =(WebApplicationContext) servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);//获取MonitorService对象
MonitorService monitorService = (MonitorService) context.getBean("monitorService");
monitorService.saveRequestInfo(URI, urlParame, jsonParame, token, userSource, publicServiceType, uuid);
}
};
saveReqInfo.start();
}
}