h2:
console:
enabled: true
path: /h2-console
application.yml
파일에 위와 같이 설정하면 localhost:8080/h2-console
에 접속해서 웹 콘솔을 사용할 수 있다.
문제 상황
그런데 Spring Security를 사용하면 localhost:8080/h2-console
에 접속했을 때 아래와 같은 로그인 페이지로 계속 리다이렉트된다.
해결 방법
감사하게도 원인과 해결 방법을 아주 깔끔하게 정리해 주신 글을 찾았다.
요약하자면 /h2-console/**
URL에 대하여
- 인증 면제
- CSRF 방지 면제
- X-Frame-Option Same Origin
처리를 해주면 해결된다는 내용이다.
코드
다만 Spring Security 버전 6.x 이상부터 엄청나게 업데이트 되어서, 사용법도 많이 바뀌고 Deprecated
된 것들이 너무 많았다. 그래서 레퍼런스를 참고해서 코드를 다시 짰다.
@Configuration
@EnableWebSecurity
public class WebSecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(auth -> auth
.requestMatchers(new AntPathRequestMatcher("/h2-console/**")).permitAll()
.anyRequest()
.authenticated()) // 인증 면제
.csrf(AbstractHttpConfigurer::disable) // CSRF 방지 면제
.headers(headers ->
headers.frameOptions(FrameOptionsConfig::sameOrigin)
); // X-Frame-Options 설정
return http.build();
}
}
참고로 '인증 면제'와 'CSRF 방지 면제' 처리만 해주면 h2-console 창은 보이지만 막상 접속하면 아래와 같이 조회할 수 없게 되니 X-Frame-Options
처리도 꼭 해줘야 한다.
혹시나 잘못된 내용이 있다면 댓글로 알려주세요!
📗Reference
'나의 개발일기' 카테고리의 다른 글
[Java/Spring] enum으로 코드를 개선해보자(2) : enum과 JPA, 그리고 AttributeConverter (0) | 2023.09.27 |
---|---|
[Java/Spring] enum으로 코드를 개선해보자(1) : enum을 적용하게 된 과정 (0) | 2023.09.26 |
[Java/Spring] Controller 테스트의 “JPA metamodel must not be empty!” (0) | 2023.09.25 |