RemoteServiceServletとFilterを使用して、ユーザーのWebアプリケーションで要求されているメソッドを追跡する要求をキャッチしようとしています。
私はこれを行うことができません...
ServletFilterのようなものと呼ばれるメソッドを追跡するための最良の方法を誰かが提案できますか?
注私はユーザーと彼が要求した彼の要求を追跡するのが好きです。
「SpringMVC 」または「GoogleGuice」を使用してこれを行うことができます。このアイデアの背後にある手順は次のとおりです。
processCallメソッドをオーバーライドして、クライアントがどのクラスのどのメソッドを呼び出したいかを確認できるようにします。
@Override public String processCall(Stringpayload)は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);
}
}
Googleguiceを使用したこのサンプルを見ることができます。
よいひとときを。
public boolean preProcess(HttpExchange exchange)
次のように、RemoteServiceServletの実装をオーバーライドできます。
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;
}
すべてのメソッドjava.util.logging.Loggerの先頭で使用してから、パラメーターとユーザー情報を書き込みます。情報はTomcatログに書き込まれます。