2012-04-11 1 views
1

Spring 3.1.1.Release, Security 3.1.0.Release를 사용하고 있습니다.보안 SessionFixationProtectionStatgy가 세션 범위 Bean을 방해합니다.

웹 응용 프로그램에 로그인/로그 아웃을 추가했지만 세션 범위가 설정된 콩이 작동하지 않습니다. bean은 CMSConnector라는 CMS에 연결하는 데 사용됩니다.

사용자를 인증하기 위해 AuthenticationProvider를 구현하고 authenticate() 호출에서 세션 범위 CMSConnector를 가져 와서 CMSConnector.login()을 호출했습니다. CMS 로그인에 실패하면 로그인에 실패합니다.

인한 문제 -

로그인 성공, @PreDestroy 로그 아웃()가 성공적으로 로그인 한 후 즉시 호출 인 경우. 그런 다음 SessionFixationProtectionStrategy가 이전 세션을 무효화하고 새 세션을 할당한다는 것을 알았습니다.

session.invalidate(); 
session = request.getSession(true); // we now have a new session 

무효 인은() 세션 범위 빈에 @PreDestroy 메소드를 호출한다.

그래서 @predestroy 주석을 일시적으로 제거하여 연결이 닫히지 않도록했습니다. (매우 나쁜 실습)

문제를 해결하기위한 해결 방법은 무엇입니까?

@PostConstruct를 만들고 거기에 로그인 프로세스를 넣으려고했지만 request.getSession (true)이 호출 될 때 @PostConstruct가 호출되지 않습니다.

감사합니다.

제이슨

답변

0

에 내가 내 원래의 질문을 해결하지 못했지만, 내가 해결 방법을 구현 - 세션에서 세션을 만료 객체 대신 @PreDestroy 부착을 만료됩니다.

0

나는 그것하지 SessionFixationProtectionStrategy하지만 ConcurrentSessionControlStrategy 생각합니다.

설정 최대-세션 = "- 1"이 코드 snippet

+0

감사합니다. Ravi, 디버그 세션에서 내 preDestroy가 SessionFixationProtectionStrategy 프로세스에 의해 호출 중입니다. – Jason