728x90
1. Spring Security를 사용하는 방법
Spring Security를 사용하는 경우 HttpSession의 쿠키 속성에 SameSite 옵션을 추가할 수 있습니다. SameSite 속성은 기본적으로 Strict, Lax, 또는 None으로 설정할 수 있습니다.
Spring Security에서 SameSite 설정하기
Spring Security의 CookieSerializer를 설정하여 SameSite 속성을 지정할 수 있습니다.
import org.springframework.context.annotation.Bean;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.session.web.http.CookieSerializer;
import org.springframework.session.web.http.DefaultCookieSerializer;
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
// 기본적인 보안 설정
.authorizeRequests(authorizeRequests ->
authorizeRequests.anyRequest().authenticated()
)
.csrf().disable(); // 필요시 CSRF 설정
return http.build();
}
@Bean
public CookieSerializer cookieSerializer() {
DefaultCookieSerializer serializer = new DefaultCookieSerializer();
serializer.setSameSite("None"); // 'Strict', 'Lax', 'None' 중 선택
serializer.setUseSecureCookie(true); // none 사용시 필수 설정
return serializer;
}
}
위의 설정에서 cookieSerializer() 메서드는 DefaultCookieSerializer 객체를 반환하고, setSameSite 메서드를 통해 SameSite 속성을 설정합니다.
2. 서블릿 필터를 사용하여 수동으로 쿠키 설정하기
Spring Security를 사용하지 않는 경우, 서블릿 필터를 만들어 직접 SameSite 속성을 추가할 수도 있습니다.
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Cookie;
import java.io.IOException;
public class SameSiteCookieFilter implements Filter {
@Override
public void doFilter(
HttpServletRequest request,
HttpServletResponse response,
FilterChain chain) throws IOException, ServletException {
chain.doFilter(request, response);
// 모든 응답 쿠키에 SameSite 속성 추가
for (Cookie cookie : request.getCookies()) {
String cookieHeader = String.format("%s=%s; Path=%s; SameSite=Strict",
cookie.getName(),
cookie.getValue(),
cookie.getPath());
response.addHeader("Set-Cookie", cookieHeader);
}
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// 초기화 작업 필요 시
}
@Override
public void destroy() {
// 리소스 해제 필요 시
}
}
이 필터는 HTTP 요청에 있는 쿠키들을 가져와 응답에 SameSite 속성을 추가합니다. 해당 필터를 스프링 설정에 등록하여 사용하면 됩니다.
3. application.properties에서 설정 (Spring Session을 사용하는 경우)
Spring Session을 사용 중이라면 application.properties 또는 application.yml 파일에서 간단히 설정할 수 있습니다.
server.servlet.session.cookie.same-site=none
server.servlet.session.cookie.secure=true
LIST
'Develop > JAVA' 카테고리의 다른 글
[Java] 크로스 사이트 스크립트 (XSS) 취약점 조치방법 (7) | 2024.10.30 |
---|---|
[Spring Framework] application.yml 파일에서 값 암호화 (7) | 2024.10.28 |
[Java] BigDecimal 나누기 소수점 올림, 버림, 반올림 사용방법 (5) | 2024.10.21 |
[Spring Boot] application.yml 변수 Java Static 변수에서 사용하는 방법 (12) | 2024.10.15 |
[Java] 현재 서버 도메인 정보 갖고오기 (13) | 2024.09.26 |