2016-05-31 2 views
0

다른 서버에 배포 된 JSF 응용 프로그램간에 리디렉션해야하는 유스 케이스에서 작업하고 있습니다. 메인 webapp에 친절 로그인 애플 리케이션. 처음에는 동일한 서버에이 두 가지 응용 프로그램을 배포하고 같은 도메인 (localhost)에서 실행했습니다.두 번째 응용 프로그램으로 리디렉션되었지만 jsessionid는 첫 번째 응용 프로그램과 동일합니다.

두 응용 프로그램은 다음과 같습니다. 응용 프로그램 A (로그인 포털) 및 응용 프로그램 B. 응용 프로그램 A는 루트 컨텍스트에서 실행됩니다. http://localhost:8080/이고 App B의 컨텍스트는 /app입니다. http://localhost:8080/app/. 앱 A에서 앱 B로 일반 POST 제출 요청을 통해 리디렉션 (로그인 후)하면 동일한 브라우저 탭에서 App B가 시작됩니다. 세션 ID 쿠키를 검사하면 App B가 다른 배포의 일부이지만 App A와 동일한 세션 ID를 공유하고 있음을 알 수 있습니다. 쿠키는 경로 /에 저장된 동일한 세션 ID를 표시합니다. App B를 시작한 후 새로운 세션을 기다리고있었습니다. 정상적인가요? 새 세션을 명시 적으로 만들어야합니까? 아니면 두 응용 프로그램 war 파일을 동일한 서버에 배포했기 때문에 발생합니까? localhost:8080?

+0

다음과 같은 방법을 시도해 보셨습니까? http://stackoverflow.com/questions/9436736/sharing-session-data-between-contexts-in-tomcat? – Jaumzera

+0

그리고 이것 : http://stackoverflow.com/questions/14712626/send-http-post-request-to-external-site-using-hform – Jaumzera

+0

POST 유형 HTML 양식 '

'을 통해 App B로 리디렉션 할 수 있습니다. ..
'내 JSF 페이지의 JSF 버튼을 통해 제출하십시오. 세션에 더하여, 어플리케이션 A와 어플리케이션 B 사이에서 세션을 공유하고 싶지는 않습니다. 그렇지 않으면 필요합니다. 나는 각 어플리케이션이 그들 자신의 컨텍스트 하에서 독자적인 다른 독립적 인 세션을 가져야한다. App B로 리디렉션 한 후 App B에 동일한 세션 ID가 있음을 알았습니다. 새로운 세션에서 App B를 시작해야합니다. – user2918640

답변

0

JSESSIONID은 동일한 servletcontainer에서 제공되고 동일한 브라우저 인스턴스와 상호 작용하는 두 앱 때문에 동일합니다. 동일한 HTTPSession이 두 앱에서 사용되고 있습니다.

깊이있는 설명은 HTTPSession 섹션의 내용을 확인하십시오 : How do servlets work? Instantiation, shared variables and multithreading.

부수적으로 두 개의 개별 브라우저가 서로 다른 세션에 액세스합니다. 각각은 새로운 세션 쿠키를 사용하여 서버에 액세스하므로 서버에서 새로운 HTTPSession을 받게됩니다. 동일한 브라우저 내에서 별도의 탭/창을 사용하는 경우에도 동일한 브라우저 내에서 두 앱을 모두 실행한다고 가정하면 세션 쿠키는 동일하게 유지되므로 동일한 HTTPSession에 액세스합니다.