개발하는 햄팡이

[Trouble Shooting] H2 콘솔 접근 실패. Whitelabel. FilterConfig 본문

Back-End

[Trouble Shooting] H2 콘솔 접근 실패. Whitelabel. FilterConfig

hampangee 2025. 7. 7. 03:58

 

문제 상황

 

저번주에 2주동안 진행하는 개인 프로젝트를 진행중에 테스트를 위해 h2 콘솔에 접근하려고 하는 상황이었다.

원래 따로 설정을 하지 않으면 http://localhost:8080/h2-console 로 접근할 수 있다고 알고 있는데 해당 경로로 접근할 수 없었다.

아얘 접속 화면 조차 뜨지 않는 상황..

 

 

시작할때 로그도 해당 경로로 접근하면 된다는 로그를 봤는데...

 

 

해당 프로젝트는 내가 처음부터 만든 프로젝트가 아니라 이미 만들어진 프로젝트를 리팩토링 하고 개선하는 프로젝트라서

구조를 잘 모르는 상태였다.

 

 

해결 과정

인터넷에서 검색하여 h2 콘솔 접근 시 whitelabel error를 검색했더니 

application.properties에 아래 설정을 입력해주면 된다고 하여 해당 코드도 넣어줬다.

spring.h2.console.enabled=true
spring.h2.console.path=/h2-console

 

 

쓰면서 의아했던게 저 설정이 default던데...

생각했는데

 

역시나 해결되지 않음..

 

 

그래서 gpt의 힘을 빌렸는데 Spring Security가 적용되어 있을 경우 접근이 불가능한 경우가 있다고 한다.

 

도전 과제가 Spring Security적용하기라서 -> 아직 적용이 안됐으니 문제 없을 것이라고 생각.

그래서 한참을 헤매다가

 

Spring Security는 사용하지 않지만 JWT를 사용한다는 것을 인지하고 FilterConfig & JWTFilter 파일로 이동.

모든 경로에 대해서 Filter를 적용하고 있었다.

 

뭔가 이 부분에서 로그인 하지 않고 접근하려고 하여 문제가 생긴 것 같아 dofilter메소드 쪽에서 해당 경로를 스킵하는 코드를 넣어줬더니 해결됐다.

 

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest httpRequest = (HttpServletRequest) request;
        HttpServletResponse httpResponse = (HttpServletResponse) response;

        String url = httpRequest.getRequestURI();

        if (url.startsWith("/auth") || url.startsWith("/h2-console")) {
            chain.doFilter(request, response);
            return;
        }
        
	....
	}

 

 


 

그런데 경로를 저기에 넣어주니 뭔가...

아얘 JWTFilter안으로 들어가지 않았으면 하는 생각이 들었다.

 

아래처럼 생긴 Config 파일이 있는데 이 부분에서 Spring Security처럼 경로 제외 같은 메소드를 사용할 수 있지 않을까 했는데

그런 메소드는 없는 것 같다..

(혹시 누군가 이 글을 보고 그런 역할을 하는 메소드가 있다면 댓글로 알려주세요)

@Configuration
@RequiredArgsConstructor
public class FilterConfig {

    private final JwtUtil jwtUtil;

    @Bean
    public FilterRegistrationBean<JwtFilter> jwtFilter() {
        FilterRegistrationBean<JwtFilter> registrationBean = new FilterRegistrationBean<>();
        registrationBean.setFilter(new JwtFilter(jwtUtil));
        registrationBean.addUrlPatterns("/*"); // 필터를 적용할 URL 패턴을 지정합니다.

        return registrationBean;
    }
}

 

 

그리고 여기서 알게된 url경로를 /api/어쩌구 로 하는 이유..!

 

이런 api 자체가 아닌 경우, 즉 인증을 해야하는지 아닌지를 검증하는 api 자체가 아닌 경우 ex)h2 console, swagger

나처럼 filter 안으로 아얘 들어오지 않도록 하고 싶으면

setFilter를 "/api/*" 로 설정해서 api 메소드만 filter를 적용하도록 할 수 있는데

현재 이 프로젝트는 그냥 바로 /auth, /user 이런식으로 되어있어서 저렇게 설정해줄 수가 없다...

 

사소한 부분이기 때문에 그냥 filter안에서 분기해주는 방식으로 해결하고 넘어갔지만

이게 중요한 문제로 대두되어 전체 controller를 바꿔야된다고 생각하면 좀 귀찮다....

 

뭐 어쨌든 원하는 문제는 해결!