아마 이 화면이 떠서 검색하셨겠죠?
localhost에서 연결을 거부했습니다.
DB에 데이터가 들어가는지 테스트를 해보려는데 갑자기 H2한테 거절당했습니다. 원인에 대해서 여러 방법을 생각해봤는데, Spring Security 의존성 추가 후에 생긴 일이라 Spring Security를 의심해봤습니다.
원인
- Spring Security는 의존성 추가시 인증 절차를 거쳐야 사용할 수 있도록 자동으로 localhost:8080/login에 리디렉션 합니다. 해당 부분이 문제가 될 것이라고 생각해서 첫 번째 방법으로 접근 권한을 permitAll()을 사용해서 열어보도록 하겠습니다.
- 두 번째 방법으로는 X-frame-options라는 헤더에 포함된 요소를 disable()해주는 것인데요. X-Frame-Options은 HTTP 응답 헤더의 하나로, 해당 페이지가
<frame>
,<iframe>
,<object>
태그 등을 통해 다른 HTML 페이지에 삽입될 수 있는지를 결정하는 역할을 합니다. 이 헤더는 웹 사이트를 클릭재킹(clickjacking) 공격으로부터 보호하는 데 사용됩니다. Spring Security에서는 해당 기능을 자동으로 사용 가능하도록 해놨기 때문에 disable()해보겠습니다.
해결
- 접근 권한 모두 열기
@Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/h2/**").permitAll(); return http.build(); }
-> permitAll()을 /h2/** url을 열어두는 방식이지만 해당 방법은 여전히 H2를 이용할 수 없었습니다.
- X-Frame-Options를 사용하지 않는 방법
@Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http .headers().frameOptions().disable(); return http.build(); }
-> 해당 방식을 사용하자 H2에 접근할 수 있었습니다.
- X-Frame-Options를 비활성화하면 인증 절차 없이 H2를 이용할 수 있음을 확인했습니다.
- 앞으로는 실제 배포 전에 X-Frame-Options를 비활성화 해서 테스트를 진행할 수 있습니다.
참고 링크
읽어주셔서 감사합니다. 혹시 피드백할 부분이 있으시다면 언제든 댓글 남겨주세요.