반응형
문제 발단
- 스프링 시큐리티에서는 기본적으로 X-Frame-Options 을 deny(해당 경로에 대한 모든 frame 삽입 차단)로 지정해두기 때문에, 데이터베이스 조작을 위한 인터페이스를 iframe 형식으로 렌더링 시 이를 차단하기 때문입니다.
- 즉, 해당 문제를 개선하려면 해당 경로에 접속하는 경우에는(동일 경로에 한정하여서는) 렌더링되는 것을 허용하도록 스프링 시큐리티 구성 파일에서 설정해주면 됩니다.
코드 적용
- 스프링 시큐리티 6.11 버전이상에서 적용
- SecurityConfig 파일에
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception{
// 동일 경로에 한하여 h2-console 접속 시 iframe 허용
http.headers(httpSecurityHeadersConfigurer -> httpSecurityHeadersConfigurer.frameOptions(HeadersConfigurer.FrameOptionsConfig::sameOrigin));
// 아니면 아에 x-frame-option 을 꺼둘 수도 있습니다.
http.headers(AbstractHttpConfigurer::disable);
return http.build();
}
}
참고 | X-Frame-Options 헤더가 가질 수 있는 값
X-Frame-Options는 다음과 같은 세 가지 값을 가질 수 있습니다.
- DENY: 페이지가 어떤 경우에도 <iframe>에 삽입되지 않도록 합니다.
- SAMEORIGIN: 동일 출처에서만 <iframe>에 삽입될 수 있습니다. 즉, 페이지를 포함하려는 도메인이 페이지와 동일한 도메인일 때만 허용됩니다.
- ALLOW-FROM uri: 특정 도메인에서만 해당 페이지를 포함할 수 있도록 허용합니다. 하지만 이 옵션은 모든 브라우저에서 지원되지는 않습니다.
반응형
'백엔드 > 스프링(부트)' 카테고리의 다른 글
Spring Security와 Axios를 활용한 CORS 및 Authorization 헤더 문제 해결 (1) | 2024.12.15 |
---|---|
스프링 시큐리티는 복잡합니다. 다만, 공통된 인증 흐름은 존재합니다. (0) | 2024.10.04 |