Spring Security는 여러 필터에서 OAuth2.0 인증을 처리하는데요. 필터 목록을 갖고 있는 FilterChainProxy을 확인 해보면 디버깅의 실마리를 찾을 수 있습니다. 스프링 시큐리티가 어떤 식으로 OAuth2.0을 구현하는지 또는 에러가 났는데 API 호출로는 에러가 났다는 것 이외에 별다른 정보가 없을 때 디버깅하는 방법을 소개하겠습니다.
1. FilterChainProxy 의 doFilter 메서드 중 원하는 곳에 break point를 겁니다.
스프링 시큐리티 디버깅을 위해 제일 처음 FilterChainProxy에 브레이크 포인트를 걸어서 확인하는 이유는 Spring Security를 사용하면 서블릿 필터는 FilterChainProxy라는 스프링 빈에 필터를 위임합니다. 즉, 스프링 시큐리티를 이용한 보안이 적용된 WAS에 접근할 때 Spring 컨테이너의 첫 관문이 FilterChainProxy 클래스가 되기 때문입니다.
FilterChainProxy에 브레이크 포인트를 걸면 FilterChainProxy 가 갖고 있는 필터 목록을 확인할 수 있습니다.
doFilter 메서드에 브레이크를 건 이유는 필터는 기본적으로 doFilter 메서드를 갖고 있고 해당 메서드를 실행하도록 되어 있기 때문입니다.
저는 그 중에서도 아래 nextFilter.doFilter 부분에 브레이크를 걸어서 resume 버튼을 눌렀을 때 각 필터 목록을 빠르게 스킵할 수 있도록 합니다.
nextFilter.doFilter(request, response, this);
2. FilterChainProxy 에서 스프링 시큐리티가 처리하는 필터 목록을 얻은 후 필터 중에 어떤 필터를 확인할 지 정합니다.
additionalFitlers를 확인해보면 필터 목록의 이름만 확인해도 직관적으로 알 수 있는데요. 지금 확인하고자 하는 내용과 연관된 필터 클래스를 인텔리제이에서 찾아봅니다. (윈도우의 경우 shift두 번 누르면 클래스를 찾을 수 있습니다.)
저의 경우는 인가 코드(authorization code)를 가져오는 부분에 커스터마이징을 한 후 에러가 발생하여 인가 코드 가져오는 부분을 확인하고 싶었고 기존 작업을 통해 7번 필터인 OAuth2LoginAuthenticationFilter라는 것을 알고 있었습니다. 미리 알지 못하더라도 예상 되는 부분의 필터의 doFilter 메서드에 브레이크 포인트를 걸고 확인하면 어렵지 않게 문제 발생 포인트를 찾을 수 있습니다.
'Spring Framework > Spring' 카테고리의 다른 글
Spring Event 를 활용한 예약 푸쉬 발송 (0) | 2023.04.05 |
---|---|
스프링 시큐리티 DelegatingFilterProxy, FilterChainProxy (0) | 2023.02.15 |
스프링부트 버젼 - 마이너 버전 (0) | 2022.06.01 |
WebMvcConfigurer (0) | 2022.04.18 |
[토비의스프링] 1-7 의존관계 주입 DI (0) | 2022.03.30 |
댓글