Spring Security 디버깅 방법

2023. 3. 30. 20:00·Spring Framework/Spring

 

 

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 메서드에 브레이크 포인트를 걸고 확인하면 어렵지 않게 문제 발생 포인트를 찾을 수 있습니다. 

FilterChainProxy의 필터 목록

 

 

저작자표시 비영리 변경금지 (새창열림)

'Spring Framework > Spring' 카테고리의 다른 글

스프링이 자바 빈 등록하는 방법  (1) 2025.06.07
Spring Event 를 활용한 예약 푸쉬 발송  (0) 2023.04.05
스프링 시큐리티 DelegatingFilterProxy, FilterChainProxy  (0) 2023.02.15
스프링부트 버젼 - 마이너 버전  (0) 2022.06.01
WebMvcConfigurer  (0) 2022.04.18
'Spring Framework/Spring' 카테고리의 다른 글
  • 스프링이 자바 빈 등록하는 방법
  • Spring Event 를 활용한 예약 푸쉬 발송
  • 스프링 시큐리티 DelegatingFilterProxy, FilterChainProxy
  • 스프링부트 버젼 - 마이너 버전
devstep
devstep
웹 백엔드 개발자
  • devstep
    개발 여정
    devstep
  • 전체
    오늘
    어제
    • 분류 전체보기 (91) N
      • Java (24)
      • Spring Framework (17) N
        • Spring (14) N
        • JPA (3)
      • Database (8)
        • RDBMS공통 (1)
        • MySQL (6)
        • Redis (0)
        • Oracle (1)
      • Concept (13)
        • 테스트코드 (4)
        • 클린코드 (2)
        • 성능테스트 (4)
        • 설계 (1)
        • 인증 (1)
        • REST API (1)
      • git (2)
      • Intellij (4)
      • Computer Science (3)
        • 네트워크 (1)
        • 자료구조 (1)
        • 보안 (1)
      • Essay (18) N
        • Learning Essay (10)
        • WIL (8) N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    innodb
    JavaMemoryModel
    DDD
    tdd
    클린코드
    비대칭암호화
    linux
    ClusteredIndex
    테스트코드
    springsecurity
    nginx
    부하테스트도구
    seed
    JMeter
    보안
    자바메모리모델
    단위테스트
    aggregate
    부하테스트
    대칭암호화
    storageEngine
    component
    인텔리제이실행에러
    nofile
    applicationcontext
    성능테스트
    JVM
    bean
    블록암호화
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
devstep
Spring Security 디버깅 방법
상단으로

티스토리툴바