【问题标题】:Log GWT method name in the access log在访问日志中记录 GWT 方法名称
【发布时间】:2011-01-03 19:19:15
【问题描述】:

在 GWT 中,请求被发送到 XXXX.rpc,后者映射到“GWT 控制器”(RemoteService)。将被调用的方法名称隐藏在该请求的帖子中。

有没有办法将方法名称作为附加的 HTTP 标头或作为 URL 的一部分发送?这样我们就可以在访问日志中记录方法名称。

我知道有一个RpcRequestBuilder 类,但我不知道如何扩展它以将方法名称添加到标题或 URL。

【问题讨论】:

    标签: gwt logging


    【解决方案1】:

    如果可能的话,我认为你应该以不同的方式解决这个问题。这是另一个想法。

    方法名其实已经发送了,只是像你说的那样被埋没了。但是在服务器端你可以捕捉到这个名字。在RemoteServiceServlet 中有一个受保护的方法onAfterRequestDeserialized,它为您提供数据的解码版本,并且专门针对这类事情。它包含方法名称。只需扩展此方法并在其中记录方法名称即可。这样您就不必在客户端代码中添加技巧。

    【讨论】:

    • 获得方法名称后,您需要执行特定于服务器的操作来记录它。例如,如果您使用 JBoss 或 Tomcat,您可以将方法名称放入请求中:request.setAttribute("GWT_METHOD_NAME", methodName);然后使用 AccessLogValve 和模式记录它: %{GWT_METHOD_NAME}r
    【解决方案2】:

    我认为这个链接可以帮助你..http://stuffthathappens.com/blog/2009/12/22/custom-http-headers-with-gwt-rpc/

    编辑: 您应该在调用远程服务方法之前设置 methodName..

    public class MyRpcRequestBuilder extends RpcRequestBuilder() {
        String methodName;
         public void setMethodName(String name) {
             methodName = name;
         }
         @Override  
        protected RequestBuilder doFinish(RequestBuilder rb) {    
            RequestBuilder rb = super.doFinish(rb);    
            rb.setHeader("method", methodName);    
            return rb;  
        }
    };
    

    【讨论】:

    • 谢谢。但我真正想知道的是如何将方法名称放入标题中?
    • 好吧,没有任何通用的解决方案可以解决您的问题。但是您可以通过覆盖 doFinish 方法 RpcRequestBuilder 类来做到这一点。
    • 我的队友最终使用了这个但覆盖了 doSetRequestData() 方法。他解析出 rpcMethodName 并将其设置在标题中。他搜索了 Rpc|rpceMethodName|并提取了 rpcMethodName。
    猜你喜欢
    • 1970-01-01
    • 2012-02-23
    • 1970-01-01
    • 2014-03-06
    • 1970-01-01
    • 1970-01-01
    • 2011-04-30
    • 1970-01-01
    • 2012-03-12
    相关资源
    最近更新 更多