2012-12-09 3 views
1

오케이. 내가하고 싶은 일은 사용자를 업데이트 할 때 현재 자격 증명을 새로 고치려면 현재 가지고있는 세션을 무효화 할 수 있습니다. 세션 관련 사용자 데이터에 직접 액세스 할 수 있는지 신경 쓰지 않습니다. 이상적으로, 나는 또한 비슷한 방식으로 한 세션으로 사용자를 제한 할 수있을 것이다.다른 사용자의 Java HttpSession을 저장하고 무효화하십시오.

내가 시도한 것은 사용자 이름을 키로 사용하고 HttpSession을 값으로 사용하여 HashMap을 만드는 것입니다. (실제 설정은 좀 더 복잡하지만 반복적으로 설명 할 수없는 오류가 반복 된 후에이 간단한 테스트로 끝내 었습니다). 그러나 검색된 HttpSession에 무효화를 시도 할 때마다 현재 [admin] 세션이 무효화 된 것처럼 보입니다. HttpSession은 현재 요청에 밀접하게 연결되어 있습니까?

아니면이 문제를 해결할 완전히 다른 방법이 있습니까?

문제가 발생하면 제티 6.1.26을 사용하고 있습니다.

답변

1

직접적인 방법은 없습니다. 내가 생각할 수있는 가장 쉬운 방법은 데이터베이스 (또는 cahche)에 플래그를 유지하고 각 요청에 대해 유효성을 검사하는 것입니다.

또는 HTTP 세션 수신기를 구현하고 액세스 및 무효화 할 수있는 사용자 세션의 HashMap을 유지할 수 있습니다.

나는 이들 중 어떤 것도 시도하지 않았으므로 어떤 성능 문제도 알지 못합니다. 그러나 대부분의 응용 프로그램에서 허용되어야합니다.

+0

거의 정확히 (세션 리스너) 설정입니다. 문제는 session.invalidate()를 호출 할 때 대상 세션이 아니라 무효화 된 세션을 무효화하는 것이 었습니다. 내 생각은 세션 범위 bean에 잘못된 플래그를 설정하고 aspect를 사용하여 거기에서 확인하고 무효화하는 것이다. 또는 요청 범위의 빈에서 검증을 수행 할 수 있다고 생각합니다. 어쨌든, 그것은 같은 장소에 도착하게됩니다 (aspect 또는 인스턴스화가 먼저 발생하는지에 따라). – Apropos

+0

그지도에서 다른 사용자의 세션에 대해 무효화를 호출했을 때 당신은 무효화 된 유일한 사람 이었습니까? 어쩌면 세션이 맵에 있었고 무효화되었습니다. – Thihara

+0

예. 대상 세션은 영향을받지 않았습니다. – Apropos

0

글쎄, 내가 말할 수있는 한, 주변에는 방법이 없다. 요청 범위 Bean을 사용하는 것은 예상대로 작동하지 않았습니다 (스프링이 작동하는 방법에 대한 좋은 통찰력을 주지만 필드 액세스를 가로 채기는했지만). 나는 매우 높은 우선 순위 aspect 검사를 가진 SessionHandler (세션 스코프 된 빈)에 더티 플래그를 사용하고, 필요한 경우 사용자의 다음 요청에서 세션에 대해 invalidate()를 호출했다. 나는 여전히 모든 SessionHandlers를 SessionManager에 등록하고 @PreDestroy 메소드를 등록 취소하여지도에 null 항목이 포함되는 것을 피했습니다.

관련 문제