본문 바로가기
programing/Java

[Spring] Tomcat 세션

by RedWiz 2019. 4. 4.

 - HTTP프로토콜은 비접속형, 비연결지향성(TCP임에도) 프로토콜이기 때문에 매 접속마다 새로운 네트워크 연결이 이루어진다. 그래서 서버는 클라이언트의 이전 상태를 기억하기위해 세션을 사용한다.

 

 - 보통 웹 어플리케이션에서 세션을 이용해서 로그인 정보의 상태를 유지할 수 있게 한다.

 

 - 톰캣은 사용자가 로그인하지 않아도 통신할 때 response로 JSESSIONID 쿠키 값을 브라우저에 내려준다.

 

- 쿠키는 포트를 구분하지 않기 때문에 포트를 분리하여도 같은 서비스로 인식하여 로컬에 저장되어 있는 쿠키를 서버로 전송하여 JSESSIONID가 충돌되게 된다.

 

- 같은 IP 내 다른 포트의 서비스의 JSESSIONID의 충돌을 방지하려면 세션 쿠키 이름을 정해주면 된다.

( Spring에서는 application.properties에 server.servlet.session.cookie.name=이름 으로 설정

Tomcat에서는 server.xml의 context에 sessionCookieName="이름" 추가)

 

cf. withCredentials (Access-Control-Allow-Credentials)

https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/withCredentials

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Credentials

 

 

 

 

 

cf. SpringBoot CorsFilter 설정

import java.io.IOException;

 

import javax.servlet.FilterChain;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Component;

import org.springframework.web.filter.OncePerRequestFilter;

 

@Component

public class CorsFilter extends OncePerRequestFilter {

 

    @Override

    protected void doFilterInternal(HttpServletRequest requestHttpServletResponse responseFilterChain filterChainthrows ServletExceptionIOException {

        

        response.setHeader("Access-Control-Allow-Origin""http://localhost");

        response.setHeader("Access-Control-Allow-Methods""GET, POST, PUT, DELETE, OPTIONS");

        response.setHeader("Access-Control-Max-Age""3600");

        response.setHeader("Access-Control-Allow-Headers""authorization, content-type, xsrf-token");

        response.setHeader("Access-Control-Allow-Credentials""true");

        response.addHeader("Access-Control-Expose-Headers""xsrf-token");

        if ("OPTIONS".equals(request.getMethod())) {

            response.setStatus(HttpServletResponse.SC_OK);

        } else {

            filterChain.doFilter(request, response);

        }

    }

}

 

 

 

 

 

'programing > Java' 카테고리의 다른 글

Java에서의 Lamda  (0) 2019.01.10
[Spring] JSON  (0) 2019.01.10
[Spring] RestTemplate.postForObject()  (0) 2019.01.10
Collections  (0) 2018.02.09
Annotation (@)  (0) 2018.02.09