2023-11-20 작성

H2-console에서 Localhost에서 연결을 거부했습니다. 오류 발생시 해결법

문제 발생

h2-console로 접속하니 아래처럼 'localhost에서 연결을 거부했습니다'로 콘솔 접속이 거부된다.

해결 방법 1

만약 스프링 시큐리티(Spring security)를 적용했다면 h2-console 경로에서도 접근 가능하도록 설정을 해줘야 한다. antMatchers 메서드에 "/h2-console/**"을 추가해준다.

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
    .authorizeRequests()
    .antMatchers("/h2-console/**)")
    .permitAll;
}

해결 방법 2

그래도 동작하지 않는다면 X-Frame-Options 기능을 꺼본다. 스프링 시큐리티에서는 기본적으로 X-Frame-Options 옵션을 사용하도록 해두었다. 이 옵션은 HTTP 응답 헤더 내 한 요소로써 <frame>, <iframe>, <object> 등에서 렌더링 가능한지를 알려주는 역할을 한다. 특히 클릭재킹 공격을 막기 위해 사용하는데, 이 기능 때문에 h2-console에 접근이 안될 수 있으므로, h2를 사용하는 동안에 이 기능을 꺼둘 수 있다.

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
    .headers().frameOptions().disable;
}

http 헤더에 x-frame-options을 disable처리하면 옵션을 끌 수 있다. 이렇게 하니 h2-console의 접속이 다시 가능했다. (만약 배포하는 서비스가 h2를 사용하지 않는다면 이 부분은 삭제 후 배포해도 된다.)