프로젝트를 각각의 Context로 배포할 경우 세션정보의 공유가 필요합니다.
Apache Tomcat에서 Context간 세션공유를 위한 클러스터링 설정에 대해 다음과 같이 설정하면
세션공유가 이루어집니다.
0. 테스트 환경
apache-tomcat-9.0.37
1. Context.xml 변경
apache-tomcat-9.0.37>Conf>context.xml 파일 내용 수정
[기존코드]
<!-- The contents of this file will be loaded for each web application -->
<Context>
<!-- Default set of monitored resources. If one of these changes, the -->
<!-- web application will be reloaded. -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>
<WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
<!-- Uncomment this to disable session persistence across Tomcat restarts -->
<!--
<Manager pathname="" />
-->
</Context>
[변경코드]
<Context crossContext="true">
<!-- The contents of this file will be loaded for each web application -->
<Context crossContext="true">
<!-- Default set of monitored resources. If one of these changes, the -->
<!-- web application will be reloaded. -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>
<WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
<!-- Uncomment this to disable session persistence across Tomcat restarts -->
<!--
<Manager pathname="" />
-->
</Context>
2. Server.xml 변경
[기존코드]
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
[변경코드]
<Connector>테그에 emptySessionPath="true" 항목추가
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" emptySessionPath="true"/>
3. 세션 설정
(1) 단일 프로젝트의 경우 일반적인 방법
@RequestMapping(value = "/uat/uia/actionLogin.do")
public String actionLogin(@ModelAttribute("loginVO") LoginVO loginVO, HttpServletRequest request, HttpServletResponse response, ModelMap model) throws IOException, InvocationTargetException, SQLException {
...
//로그인 VO값 정보 설정
LoginVO resultVO = 로그인정보 받아서 설정
//세선에 정보 저장
request.getSession().setAttribute("LoginVO", resultVO);
(2) 서로다른 컨텍스트간 세션 설정방법
@RequestMapping(value = "/uat/uia/actionLogin.do")
public String actionLogin(@ModelAttribute("loginVO") LoginVO loginVO, HttpServletRequest request, HttpServletResponse response, ModelMap model) throws IOException, InvocationTargetException, SQLException {
...
//로그인 VO값 정보 설정
LoginVO resultVO = 로그인정보 받아서 설정
//WAS Context간 Session공유 설정
request.getSession().getServletContext().setAttribute("LoginVO", resultVO);
4. 세션정보 얻기
(1) 단일 프로젝트 세선 가져오기
HttpServletRequest request,
...
LoginVO resultVO = (LoginVO)request.getSession().getAttribute("LoginVO");
(2)-1 서로다른 컨텍스트간 세선설정값 가져오기(루트 컨텍스트 세션정보)
HttpServletRequest request
...
LoginVO loginVO = (LoginVO) request.getSession().getServletContext().getContext("/").getAttribute("LoginVO");
(2)-2 서로다른 컨텍스트간 세선설정값 가져오기(sub프로젝트 컨텍스트 세선정보)
HttpServletRequest request
...
//LoginVO loginVO = (LoginVO) request.getSession().getServletContext().getContext("[프로젝트 path정보]").getAttribute("LoginVO");
LoginVO loginVO = (LoginVO) request.getSession().getServletContext().getContext("/subprj").getAttribute("LoginVO");
반응형
최근댓글