2012-03-05 4 views
3

나는 Spring 클라이언트에서 실행되는 서버와 Tomcat 7에서 실행되는 서버를 가지고 있으며 이들은 Spring (3.1) HTTP 호출자를 사용하여 서로 통신한다. 통신은 지금까지 (심지어 TSL로) 잘 작동하지만 지금은 스프링 보안을 추가하려고합니다.Spring HTTP Invoker 세션 (상태) 스토리지

side-note : 일반적인 웹 응용 프로그램에서는 기본 인증을 사용하여 사용자를 인증합니다. 내 CustomAuthenticationProvider가 사용자에 대한 Authentication 객체를 반환하면 모든 것이 "그냥 작동합니다". 즉 모든 추가 요청에서 SecurityContext가 자동으로 설정된다는 것을 의미합니다. 난 로그인 세션을 식별하는 모든 요청에 ​​보내는 클라이언트 세션 키를 반환 같아요.

그건 내가 HTTP-Invoker로 찾고있는 것입니다. 현재로서는 customAuthenticationManager.authenticate (인증 인증) 메서드가 꽤 비싸고 실제로는 사용자 세션 당 한 번만 호출해야하기 때문에 모든 요청에 ​​대해 새로운 컨텍스트를 얻는 것처럼 보입니다.

아이디어가 있으십니까?

편집 나는 http://forum.springsource.org/showthread.php?10764-Maintaing-State-while-using-HttpInvoker에서 이에 대한 몇 가지 힌트를 찾았지만,이 링크가 더 후 8 세이기 때문에, 내가 쉽게 솔루션을 기대했다.

답변

3

지금 해결책을 찾았습니다. 먼저 스프링 보안 부분이 웹 응용 프로그램과 완전히 동일하다는 것을 알아야합니다 (위대합니다).

클라이언트 쪽에서는 좀 더 복잡한 HTTP 클라이언트 구현이 필요합니다. 나는 org.springframework.remoting.httpinvoker.HttpComponentsHttpInvokerRequestExecutor을 사용했다. 서버 측에서는 create-session="always" --element 속성을 사용하여 세션이 항상 생성되도록 할 수 있습니다. 그러나, 나 자신이 세션을 만드는 것이 더 좋다는 것을 알았습니다. (존재하지 않는다면 세션을 만드는 httpServletRequest.getSession()을 호출하십시오.) 그렇게 할 수있는 방법을 지정할 수 있습니다. 내 경우에는 인증이 성공한 경우에만 내 authenticationProvider에서 세션을 만듭니다.

+0

답변을 공유해 주셔서 감사합니다. 한 가지 예외는 있지만 우리는 스프링 2.5.x를 사용하고 있습니다. 그러므로 우리는 org.springframework.remoting.httpinvoker.CommonsHttpInvokerRequestExecutor (여기에서 지적한 바와 같이 : http://forum.springsource.org/showthread.php?10764-Maintaing-State-while-using-HttpInvoker) –