Spring/Error

[H2] localhost에서 연결을 거부했습니다. 해결방법

번잔중 2023. 7. 5. 00:00

localhost에서 연결을 거부했답니다.


아마 이 화면이 떠서 검색하셨겠죠?

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()해보겠습니다.

해결

  1. 접근 권한 모두 열기
    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
            .antMatchers("/h2/**").permitAll();
        return http.build();
    }
     

-> permitAll()을 /h2/** url을 열어두는 방식이지만 해당 방법은 여전히 H2를 이용할 수 없었습니다.

 

  1. 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를 비활성화 해서 테스트를 진행할 수 있습니다.

참고 링크


읽어주셔서 감사합니다. 혹시 피드백할 부분이 있으시다면 언제든 댓글 남겨주세요.