프로젝트를 각각의 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");
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기