2016-12-22 3 views
0

this article에서 두 번째 식별자를 통합하여 하나의 브라우저에 대해 여러 세션을 지원하는 방법을 설명합니다. 기본적으로이 식별자는 _s이며 요청의 URL에있는 쿼리 문자열입니다.사용자 정의 HTTP 헤더를 통합하여 브라우저 당 여러 세션을 지원합니다.

정확히 같은 것을 구현하려고하지만 쿼리 문자열 대신 맞춤 HTTP 헤더를 사용하고 싶습니다. 그리고 나는 전체 아이디어에 다소 새로운 것입니다. 누군가 가능할 지, 어디에서 시작할 지 말해 줄 수 있습니까?

답변

1

쿼리 문자열 매개 변수 _s은 주어진 요청에 사용할 세션을 찾는 데 사용됩니다. official documentation에서이 매개 변수는 세션 별칭 매개 변수이라고합니다.

source code for Spring Session을 살펴보면 세션 별칭 매개 변수를 추출하는 작업이 HttpSessionManager 인터페이스로 위임되었음을 알 수 있습니다. 현재 코드베이스에서이 인터페이스는 하나의 구현 - CookieHttpSessionStrategy을가집니다. 이는 쿼리 문자열 (링크 된 소스 코드의 183 줄 참조)에서 매개 변수를 추출합니다.

따라서 현재 구현으로 HTTP 헤더에서 매개 변수 값을 추출 할 방법이 없습니다. 단, 사용 가능한 구현은 쿼리 문자열에서만 추출 할 수 있기 때문입니다.

그러나 헤더에서 매개 변수를 추출하는 getCurrentSessionAlias 메소드를 오버라이드 (override), CookieHttpSessionStrategy를 서브 클래스와 같은 응용 프로그램에 대한 기본 세션 전략을 무시할 수 :

@Bean 
public HttpSessionStrategy httpSessionStrategy() { 
    return new MyHttpSessionStrategy(); 
} 

경우, MyHttpSessionStrategy 당신이 작성한 사용자 정의 전략 .

+0

독자적 구현이 필요 없습니다. Spring Session은 이미 ['HeaderHttpSessionStrategy'] (http://docs.spring.io/spring-session/docs/current/api/org/springframework/session/web/)를 제공합니다. http/HeaderHttpSessionStrategy.html)을 즉시 사용할 수 있습니다. –

+1

@Martin,'HeaderHttpSessionStrategy'는'getCurrentSessionAlias' 메소드를 노출하는'HttpSessionManager'를 구현하지 않습니다. 이것이 저의 대답입니다. – manish

+0

@manish 유일한 문제는'CookieHttpSessionStrategy'가 마지막입니다! 나는이'final' 키워드가 왜 존재하는지 결코 이해하지 못했다 !!! – Mehran