2009-02-03 3 views
3

스프링 2.5.6/Flex 애플리케이션 설정이 있고 스프링 보안 2.0.4와 함께 실행됩니다. 최근에로드 밸런서 (A Foundry ServerIron 4g http://www.foundrynet.com/products/a...ems/si-4g.html)가 설치되었고 이제 교차 도메인 오류가 발생합니다. 기본적으로로드 밸런서가 myloadbalancer.abc.com에 대한 요청을 시작하고 myrealserver1.abc.com이 도메인 이름으로 반환됩니다. 스프링 보안 (spring security)은 요청을 실제 서버에 전달한다. 이 문제를 어떻게 해결할 수 있습니까?로드 밸런싱, 스프링 보안, ConcurrentSessionFilter

또한 ConcurrentSessionFilter는 더 이상 작동하지 않습니다. 동시 로그온을 비활성화하도록 응용 프로그램이 설정되었지만 응용 프로그램이 부하 분산 장치 뒤에 배치 된 후에이 기능이 중지되었습니다. 여러 Oracle Application Server가 함께 클러스터되어 있다고 생각합니다. 전에는 클러스터링이나로드 밸런서를 다루지 않았으며 소프트웨어가 특정 영역에서 다르게 작성되어야한다는 것을 인식하지 못했습니다.

나에게 별개의 문제인 것처럼 들리지만이 두 가지에 대한 도움이 필요합니다. 때문에 지속적인 세션으로 클러스터 된 응용 프로그램 컨테이너에

ConcurrentSessionFilter가 (즉, 더 이상 동시 세션을 방지하지 않습니다) 작동이 중지되면, 즉 수 : 두 번째 문제에 관한

답변

3

.

이러한 설정에서 각 클러스터 노드는 독립적으로 작동하며 다른 노드와 상태를 공유하지 않습니다. 대신,로드 밸런서는 기존 세션이 항상 동일한 노드에 의해 서비스되도록합니다.

이제 스프링 시큐리티의 ConcurrentSessionController은 세션을 프린시 펄에 맵핑하여 작동합니다. 컨트롤러 자체는 사용자 세션의 시작 및 종료시 ApplicationEvents을 보내는 HttpSessionEventPublisher에 의존합니다.

둘 이상의 세션을 열려고하는 사람이 이미 세션이 열린 동일한 노드에서 끝나면 모든 것이 잘 작동합니다. HttpSessionEventPublisher은이 사용자와 연결된 세션이 이미 있으므로 세션 생성 및 인증에 대한 동시 세션 메커니즘에 실패 함을 알립니다. 그러나 다른 노드에서는 해당 사용자에 대한 세션이 아직 없으므로 ConcurrentSessionController은 불평하지 않고 로그인에 성공합니다.

다행히도 문제를 해결하는 것이 쉬워야합니다. 직접 SessionRegistry을 구현하고 모든 노드 (예 : 응용 프로그램의 데이터베이스)에 공유 데이터 저장소를 사용하십시오.