- 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 request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
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 |