서버, 독립 실행 형 SE 응용 프로그램, Spring 2.5.6 및 내장 된 부두. 클라이언트 인 Swing 응용 프로그램은 HttpInvoker를 사용하여 서버에 연결합니다.감사 HttpInvoker 호출
서버에 의해 노출 된 많은 서비스가 있으며 이제는 클라이언트가 작성한 모든 호출을 (거의) 기록해야한다는 새로운 요구 사항이 발생했습니다.
클라이언트가 몇 가지 추가 정보 (사용자 이름, 워크 스테이션 ID 등의 문자열과 정수)를 보내고 싶습니다. 서버 일반적인 방법은 그래서
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;
}
그러나 이것은 작동하지 않습니다. 헤더 또는 매개 변수는 서버에서 액세스 할 수 없습니다.
모든 응답은 크게 감사하겠습니다.
도움 주셔서 감사합니다. CommonsHttpInvokerRequestExecutor를 사용하여 서비스를 호출하지 않는 것으로 나타났습니다. 그 이유는 헤더가 나타나지 않았기 때문입니다. 이 문제가 해결되면 RequestContextHolder.getRequestAttributes();를 호출해야합니다. 서버에서 메서드 내부에서 요청한 스레드가 안전해야하고 모든 이후 가장 쉬운 방법입니다 추측 헤더를 얻으려면 :) – user971483