我正在尝试使用带有过滤器的RemoteServiceServlet来捕获请求以跟踪我的用户的webapplicaiton中请求的方法。
我无法做到这一点......
任何人都可以建议一种最好的方法来跟踪称为ServletFilter的方法。
注意我想跟踪他要求的用户和他的请求。
答案 0 :(得分:0)
在每个方法java.util.logging.Logger的开头使用,然后编写参数和用户信息。该信息将写入您的tomcat日志。
答案 1 :(得分:0)
您可以使用"Spring MVC"或"Google Guice"执行此操作,这个想法背后的步骤是:
覆盖processCall方法,以便您可以找出客户端想要调用哪个类的哪个方法。
@覆盖 public String processCall(String payload)抛出SerializationException {
try {
RPCRequest rpcRequest = RPC.decodeRequest(payload);
RemoteService service = getServiceInstance(rpcRequest.getMethod().getDeclaringClass());
return RPC.invokeAndEncodeResponse(service, rpcRequest.getMethod(),
rpcRequest.getParameters(), rpcRequest.getSerializationPolicy());
} catch (IncompatibleRemoteServiceException ex) {
getServletContext()
.log("An IncompatibleRemoteServiceException was thrown while processing this call.", ex);
return RPC.encodeResponseForFailure(null, ex);
}
}
您可以看到使用Google guice的this sample。
度过愉快的时光。
答案 2 :(得分:0)
您可以在RemoteServiceServlet的实现中覆盖public boolean preProcess(HttpExchange exchange)
,如下所示。
public boolean preProcess(HttpExchange exchange) {
String body = null;
RPCRequest req = null;
// Read and parse the request
byte[] bytes = null;
Object bytebuf = getAttribute("RequestBody");
if ((bytebuf != null) && (bytebuf instanceof ByteBuffer)) {
bytes = ((ByteBuffer) bytebuf).array();
}
if (bytes == null) {
setAttribute("ResponseCode", new Integer(500));
setAttribute("ResponseBody", "Missing Request Body.");
return true;
}
body = new String(bytes, "UTF-8");
req = RPC.decodeRequest(body, this.getClass());
String methodName = req.getMethod().toString();
//Here you have name of a method
//You can get parameters
//Object[] parms = req.getParameters();
return true;
}