2012-10-31 2 views
3

10 개의 웹 응용 프로그램을 배포 한 Tomcat 서버가 있습니다. 하나의 응용 프로그램 ("A")에서 들어오는 요청을 읽고, 특정 쿠키 값을 읽고, 쿠키 값을 기반으로 데이터베이스에서 다른 컨텍스트 이름 (말 "B")을 ​​얻는 필터가 있습니다. 이 필터는 컨텍스트 A (예 : http://1.1.1.1/A/XYZServlet)로 요청을 컨텍스트가 B 인 새 요청 (예 : http://1.1.1.1/B/XYZServlet)으로 다시 씁니다.tomcat에서 한 컨텍스트에서 다른 컨텍스트로 전환하는 동안 세션이 손실되었습니다.

이렇게하면 새 요청이 실행될 때 모든 세션 변수가 손실됩니다. 내 필터가 이전 요청 (컨텍스트 A)을 새 요청 (컨텍스트 B)으로 리디렉션 할 때 세션 및 모든 세션 변수 (컨텍스트 A와 관련)가 유지되는지 어떻게 확인할 수 있습니까? server.xml에서 emptySessionPath = "true"로 설정하면 특정 아키텍처로 인해 솔루션이 될 수 없습니다.

+0

브라우저 쿠키를 삭제하고 다시 시도하십시오. –

답변

0

Tomcat 세션의 범위는 단일 웹 응용 프로그램입니다. 귀하의 경우 다른 컨텍스트로 전환 할 때 세션 데이터는 손실되지 않지만 새로운 컨텍스트에는 적용되지 않습니다. 범위 지정은 세션 쿠키 경로에 의해 제어되며, 생성 웹 응용 프로그램의 컨텍스트를 포함하므로 해당 컨텍스트 내의 요청에 대해서만 Tomcat으로 보내집니다.

세션의 범위를 확장하려면 몇 가지 옵션이 있습니다. 세션 쿠키 (기본값 : JSESSIONID)를 루트 컨텍스트 경로 /으로 수정할 수 있습니다. 그러나 세션 쿠키 관리는 Tomcat에 매우 깊숙이 포함되어 있으며 수정할 수 없더라도 어렵지는 않습니다. 한 번 고정 된 유효 기간과 함께 지속되는 세션 쿠키를 변경하려고했지만 이렇게 할 방법을 찾지 못했습니다.

덜 우아하지만 작동하는 방법은 세션 쿠키를 복제하는 것입니다. 나는 그것이 작동하는지 모르겠다.하지만 필터에서 세션 쿠키를 읽고 대상 컨텍스트와 함께 복제본을 경로로 만들 수있다. 후속 요청에서 위장 된 세션 쿠키가 포함되어 이전 세션 데이터를 사용할 수있게됩니다.

관련 문제