Аудит приглашений HttpInvoker - PullRequest
       26

Аудит приглашений HttpInvoker

3 голосов
/ 29 сентября 2011

Сервер, автономное приложение SE, работающее под управлением Spring 2.5.6, и встроенный причал.Клиенты, приложение Swing, подключаются к серверу с помощью HttpInvoker.

Сервер предоставляет множество сервисов, и теперь появились новые требования о том, что мне нужно регистрировать (почти) каждый вызов, сделанный клиентом.

Я хотел бы, чтобы клиент отправил некоторую дополнительную информацию (имя пользователя, идентификатор рабочей станции и т. Д. Строки и целые числа).Типичный метод на сервере выглядел бы так:

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 ();изнутри метода.

Я добавил CommonsHttpInvokerRequestExecutor на стороне клиента и перегрузил следующий метод для добавления дополнительной информации.

@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;
}

Это, однако, не будет работать.Заголовки или параметры недоступны на сервере.

Любой ответ будет принят с благодарностью.

1 Ответ

0 голосов
/ 29 сентября 2011

Я думаю, вы на правильном пути.Вы должны просто использовать пользовательский подкласс SimpleHttpInvokerServiceExporter на стороне сервера и переопределить readRemoteInvocation, чтобы извлечь заголовки, установленные клиентом, из аргумента HttpExchange.

Эти значения заголовка могут храниться в статической переменной сеанса ThreadLocal, которая будет доступна в любом месте кода на стороне сервера.

...