로그인

Language :
제목톰캣과 스프링에서 서브 도메인과 세션을 공유하기
글쓴이이지섭작성일2018-08-25수정일2024-08-09조회수10992

톰캣에서 같은 어플리케이션에 대하여 서브 도메인과 세션을 공유하는 것이다.


%TOMCAT_HOME%/webapps/ROOT

폴더 아래에

META-INF

폴더를 만들고

그 안에 context.xml 파일을 만든다.

 

%TOMCAT_HOME%/webapps/ROOT/META-INF/context.xml

 

context.xml 파일 내용 :

<?xml version="1.0" encoding="UTF-8"?>

<Context sessionCookieDomain=".jisblee.me">

   <CookieProcessor className="org.apache.tomcat.util.http.LegacyCookieProcessor" />

</Context>

 

사용하는 도메인명을 sessionCookieDomain=".도메인명" 과 같이 입력하고,

쿠키 처리기를 LegacyCookieProcessor 로 지정한다.

특별히 별도의 라이브러리를 다운받아야 하지는 않는다.

 

LegacyCookieProcessor 클래스는 /lib/tomcat-coyote.jar 파일에 있다.

 

파일 인코딩을 UTF-8 로 하였다.

 

%TOMCAT_HOME%/conf/context.xml

파일에 위의 내용을 넣어도 되지만 ROOT 어플리케이션에만 적용해도 되기에

 

%TOMCAT_HOME%/webapps/ROOT/META-INF/context.xml

파일을 만들어서 ROOT 어플리케이션에만 적용한다.

 

이렇게 하였을 경우,

jisblee.me 도메인과 www.jisblee.me 도메인 간에 세션이 공유되는 효과를 볼 수 있다.

 

참고로, 웹 어플리케이션(웹 홈페이지)에서 루트 아래에 있는 WEB-INF 폴더와 META-INF 폴더는

웹 상에서 접근이 안된다.

 

 

그리고 Spring 설정에서 세션 쿠키 도메인을 설정한다.

package com....configuration;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.session.web.http.CookieSerializer;
import org.springframework.session.web.http.DefaultCookieSerializer;

@Configuration
public class SessionCookie {
	
	@Bean
	public CookieSerializer cookieSerializer() {
		DefaultCookieSerializer serializer = new DefaultCookieSerializer();
		serializer.setDomainName("jisblee.me");
		serializer.setCookieName("JSESSIONID");
		serializer.setCookiePath("/");
		//serializer.setDomainNamePattern("^.+?\\.(\\w+\\.[a-z]+)$");
		return serializer;
	}
	
}

 

XML 설정이다.

<bean class="org.springframework.session.web.http.DefaultCookieSerializer">
  <property name="cookieName" value="JSESSIONID"></property>
    <property name="cookiePath" value="/"></property>
  <property name="domainName" value="jisblee.me"></property>
   <!-- <property name="domainNamePattern" value="^.+?\.(\w+\.[a-z]+)$"></property> -->
</bean>

 

한가지 덧붙이면 이 방식은 tomcat 10.1 버전부터는 적용되지 않는다.

LegacyCookieProcessor 클래스가 tomcat 10.1 부터는 없어졌다.

tomcat 10.0 버전은 된다.

 

[참조한 웹 페이지]

  http://kwonnam.pe.kr/wiki/java/tomcat

  https://tomcat.apache.org/tomcat-8.5-doc/config/context.html

  https://stackoverflow.com/questions/42524002/an-invalid-domain-was-specified-for-this-cookie

  https://stackoverflow.com/questions/38696081/how-to-change-cookie-processor-to-legacycookieprocessor-in-tomcat-8

  https://tomcat.apache.org/tomcat-8.5-doc/config/cookie-processor.html

  https://stackoverflow.com/questions/35076622/how-to-configure-spring-sesssion-custom-cookie-by-xml

댓글

이름               비밀번호 
내용
비밀번호를 확인합니다.

댓글 등록시 입력한 비밀번호를 입력해주시기 바랍니다.