在GWT中使用Filter的RemoteServiceServlet

时间:2012-12-18 13:21:53

标签: gwt servlets

我正在尝试使用带有过滤器的RemoteServiceServlet来捕获请求以跟踪我的用户的webapplicaiton中请求的方法。

我无法做到这一点......

任何人都可以建议一种最好的方法来跟踪称为ServletFilter的方法。

注意我想跟踪他要求的用户和他的请求。

3 个答案:

答案 0 :(得分:0)

在每个方法java.util.logging.Logger的开头使用,然后编写参数和用户信息。该信息将写入您的tomcat日志。

答案 1 :(得分:0)

您可以使用"Spring MVC""Google Guice"执行此操作,这个想法背后的步骤是:

  1. 编写一般servlet并将所有RPC的URL映射到它。
  2. 通用servlet必须扩展“RemoteServiceServlet”类。
  3. 覆盖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);
    }
    

    }

  4. 您可以看到使用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;
}