스프링 시큐리티에서 디버깅은 여간 어려운게 아닙니다. 브레이크 포인트를 걸려고 해도 필터 호출 순서도 모르곘고 어떤 필터 부터 걸어야하는지 긴가민가해서 래퍼런스 왔다갔다하면 코드집중력이 떨어집니다. 스프링 시큐리티 디버그 모드를 활성화하여 로그를 통해서 디버깅을 조금 쉽게 할 수 있습니다.
방법 1. EnableWebSecurity 어노테이션
@EnableWebSecurity(debug = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
// Config 코드를 작성해주세요.
}
EnableWebSecurity
에노테이션은 기본적으로 debug가 비활성화되어있습니다. debug값을 true로 주고 실행하면 다음과 같이 콘솔에 출력됩니다.
production에서 사용하지 말라는 강렬한 문구화함께 로그가 쭉쭉올라갑니다.
Spring Security의 코드가 실행되면 요청 URL, 세션ID, 요청 브라우저 등 다양한 정보가 나옵니다. 유용한 점은 filter chain이 나오기에 로그아웃, 권한에 따른 접근 불가 등 request에 맞는 Spring Security의 filter가 출력됩니다. 이를 바탕으로 브레이크 포인트를 걸 수 있습니다.
방법 2. web.debug(flag)
@EnableWebSecurity
public class CustomConfig extends WebSecurityConfigurerAdapter {
@Value("${spring.security.debug:false}")
boolean debugMode;
@Override
public void configure(WebSecurity web) throws Exception {
web.debug(debugMode);
}
}
spring:
security:
debug: true
방법 1은 편리하긴 하지만, 배포 단계에서 코드를 수정해야하기에 코드에 debug flag를 쓰는 것은 좋은 선택이 아닐 수 있습니다. @Value("${spring.security.debug:false}")
으로 설정하면 applicaton.yml에 설정이 안되있는 경우 기본적으로 false 값이 debugMode에 설정됩니다. application.yml에 값이 설정되어있다면 기본 false값에 overwrite됩니다.
'Computer Science > Java-Spring' 카테고리의 다른 글
프로메테우스, 그라파나를 이용한 스프링부트 모니터링 (15) | 2021.05.23 |
---|---|
[로켓 학습] 스프링부트 CRUD REST API (JPA, MySQL, Gradle) (31) | 2021.05.19 |
📘 명저로 다시보는 자바와 메모리 이야기 2편 (0) | 2020.03.24 |
📘명저로 다시보는 자바와 메모리 이야기 1편 (0) | 2020.03.23 |
📘명저로 다시보는 객체지향 이야기 (0) | 2020.03.22 |