반응형
java spring boot pg사 개발 중 로그인 세션이 종료되는 오류가 발생
크로스 도메인 처리라서 로그아웃 되는 현상이 발생합니다.
java spring > application.yml 수정
- server.servlet.session.cookie.same-site: none
- server.servlet.session.cookie.secure: true
1. server.servlet.session.cookie.same-site: none
- 설명:
SameSite 쿠키 속성을 설정합니다. 이 속성은 크로스 사이트 요청이 발생할 때, 쿠키가 어떻게 동작할지를 결정합니다.- None: 쿠키가 크로스 사이트에서 전송되는 것을 허용합니다. 이는 주로 OAuth와 같은 외부 인증 시스템을 사용할 때 필요합니다.
- Lax: 기본값이며, 쿠키가 같은 사이트 내에서만 전송되고, 크로스 사이트 GET 요청에서는 전송되지 않습니다.
- Strict: 쿠키가 같은 사이트 내에서만 전송되며, 크로스 사이트 요청에서는 전혀 전송되지 않습니다.
2. server.servlet.session.cookie.secure: true
- 설명:
이 설정은 Secure 쿠키 속성을 활성화합니다. secure: true로 설정하면, 쿠키는 HTTPS 연결에서만 클라이언트에 전송됩니다. 즉, 보안이 필요한 사이트에서는 이 설정을 통해 쿠키가 안전하게 전달되도록 할 수 있습니다.- 이 설정은 HTTPS가 아닌 HTTP로 애플리케이션을 실행하는 경우 쿠키가 전송되지 않도록 막습니다.
server:
port: 8081
servlet:
context-path: /hoho
session:
cookie:
same-site: none
secure: true
처리를 하면 로그인은 유지를 합니다.
다만 로그인 처리는 유지되지만 csrf 토큰에러가 발생합니다.
아래처럼 pg 연동이 끝나고 돌아온 html페이지에서
아래 스크립트를 실행하여 토큰 처리를 합니다.
function refreshCsrfToken() {
fetch(sessionStorage.getItem('contextPath')+'/api/csrf-token', { method: 'GET' }) // CSRF 토큰을 얻을 수 있는 API 엔드포인트
.then(response => response.json())
.then(data => {
// 새로운 CSRF 토큰을 갱신하여 사용
document.cookie = `XSRF-TOKEN=${data.token}; path=/`;
$(`meta[name='${data.parameterName}']`,opener.document).prop("content", `${data.token}`);
$(`input[name='${data.parameterName}']`,opener.document).val(`${data.token}`);
window.close();
});
}
/api/csrf-token 백엔드 페이지
@GetMapping("/api/csrf-token")
public CsrfToken csrfToken(HttpServletRequest request) {
return (CsrfToken) request.getAttribute(CsrfToken.class.getName());
}
로그인 처리 후 토큰 처리까지 끝내면 정상 동작 하는 걸 확인하실 수 있습니다.
반응형
'dev > java(egov)' 카테고리의 다른 글
sts error - Could not fetch model of type 'GradleBuild' using connection to Gradle distribution (0) | 2024.09.06 |
---|---|
[Java] java enum key value (0) | 2024.08.22 |
java rsa 암호화, 복호화 (0) | 2024.07.01 |
[mybatis] insert 후 key값 반환 selectKey (0) | 2024.05.26 |
[mybatis] Could not set property 'id' of 'class egovframework.example.sample.service.SampleVO' with value '1' (0) | 2024.05.26 |