Java 审核HttpInvoker入侵

Java 审核HttpInvoker入侵,java,spring,audit,httpinvoker,Java,Spring,Audit,Httpinvoker,服务器,一个运行Spring2.5.6的独立SE应用程序和一个嵌入式jetty。 客户端Swing应用程序使用HttpInvoker连接到服务器 服务器公开了很多服务,现在出现了新的要求,要求我需要记录(几乎)客户端的每次调用 我想做的是让客户端发送一些额外的信息(用户名、workstationId等字符串和int)。 服务器上的典型方法如下所示 public void doStuff(int someParam) { // Do stuff List result = method

服务器,一个运行Spring2.5.6的独立SE应用程序和一个嵌入式jetty。 客户端Swing应用程序使用HttpInvoker连接到服务器

服务器公开了很多服务,现在出现了新的要求,要求我需要记录(几乎)客户端的每次调用

我想做的是让客户端发送一些额外的信息(用户名、workstationId等字符串和int)。 服务器上的典型方法如下所示

public void doStuff(int someParam) {
   // Do stuff
   List result = method(someParam)

   // Audit
   // get the client information from somewhere?!!
   String username;
   int workstationId;

   auditDao.doStuffPerformed(username, workstationId, someParam, result);

}
那么,如何从服务器上的方法中获取客户机信息呢

我尝试过的一种解决方案是将客户机信息添加为请求属性,并调用方法RequestContextHolder.getRequestAttributes();从内部方法

我在客户端添加了CommonHttpInvokerRequestExecutor,并重载了以下方法以添加附加信息

@Override
protected PostMethod createPostMethod(HttpInvokerClientConfiguration config) throws IOException {
  PostMethod postMethod = super.createPostMethod(config);
  postMethod.addRequestHeader("someHeader", "someHeader2");
  postMethod.addParameter("someParam", "someParam2");
  postMethod.setRequestHeader("someRequestHeader", "someRequestHeader2");
  return postMethod;
}
然而,这是行不通的。在服务器上无法访问标头或参数


如有任何回复,我们将不胜感激。

我认为您的思路是正确的。您只需在服务器端使用一个自定义子类,并重写
readRemoteInvocation
,即可从
HttpExchange
参数中提取客户端设置的头


这些头值可以存储在静态
ThreadLocal
会话变量中,该变量可以在服务器端代码中的任何位置访问。

感谢您的帮助。我发现我没有使用CommonHttpInvokerRequestExecutor调用服务,这就是为什么没有出现标题。修复后,我所要做的就是调用RequestContextHolder.getRequestAttributes();从服务器上的方法内部获取头,我想这是最简单的方法,因为请求应该是线程安全的,并且所有:)