Spring Boot 오류 개선 1-1. MockMvc 환경에서 Spring Security 적용

최민길(Gale)·2023년 7월 17일
1

Spring Boot 적용기

목록 보기
39/46

이전 포스팅 링크 : https://velog.io/@gale4739/Spring-Boot-%EC%98%A4%EB%A5%98-%EA%B0%9C%EC%84%A0-1.-%EC%9D%B8%EC%A6%9D-%EB%A1%9C%EC%A7%81-%EC%88%98%EC%A0%95

안녕하세요 이번 시간은 지난 포스팅에서 MockMvc 환경에서 UsernamePasswordAuthenticationFilter를 사용하여 검증하는 방법에 대해 포스팅하도록 하겠습니다.

우선 검증 방법은 굉장히 단순합니다. 바로 MockMvc 인스턴스 생성 시 빌더 내부에 .apply(SecurityMockMvcConfigurers.springSecurity()) 를 추가해주면 됩니다. 하지만 여기서 추가 순서가 매우 중요합니다.

        MockMvc mvc = MockMvcBuilders
                .webAppContextSetup(context)

                // UsernamePasswordAuthenticationFilter 설정
                .apply(SecurityMockMvcConfigurers.springSecurity())

                // filter 추가
                .addFilter(uriFilter)
                .addFilter(jwtFilter)

                .build();

위의 코드처럼 커스텀 필터보다 앞에 추가할 경우 커스텀 필터가 적용되기 전 먼저 Spring Security이 적용됩니다. 반면 커스텀 필터보다 뒤에 추가할 경우 커스텀 필터가 먼저 추가된 후 Spring Security가 나중에 적용됩니다. 그럼 둘은 어떤 차이가 있을까요?

만약 커스텀 필터보다 뒤에 추가할 경우 테스트 중 Spring Security 필터 전에 커스텀 필터를 실행해야 하는 사례가 있는 경우에 사용됩니다. 하지만 현재 로직은 jwtFilter에서 SecurityContextHolder에 인증 정보를 저장하기 때문에 Spring Security 설정 이후 커스텀 필터가 작동해야 합니다. 따라서 커스텀 필터보다 앞서 추가하게 되면 저번 포스팅에서처럼 SecurityContextHolder에 값이 정상적으로 저장되어 있지 않을 때 401 에러를 반환하면서 성공적으로 적용이 된 것을 확인하실 수 있습니다.

profile
저는 상황에 맞는 최적의 솔루션을 깊고 정확한 개념의 이해를 통한 다양한 방식으로 해결해오면서 지난 3년 동안 신규 서비스를 20만 회원 서비스로 성장시킨 Software Developer 최민길입니다.

0개의 댓글