• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

LogoutFilter MockMVC 테스트 질문

23.12.18 23:10 작성 조회수 157

0

안녕하세요 양질의 강의 감사합니다 ㅎㅎ

개인 프로젝트에 LogoutFilter를 적용하고 테스트해보려는데, 404 에러가 발생합니다. 아마 mockMvc에 필터가 적용이 안된 것 같은데, 지금 생각으로는 수동으로 LogoutFilter 객체를 생성해서 mockmvc에 추가해주는 것밖에 방법이 떠오르지 않습니다.

 

혹시 아래와 같이 테스트하는 방법 말고 더 적절한 방법이 있을지 궁금합니다. 감사합니다 ^^

 

@BeforeEach
void setUp(
      WebApplicationContext webApplicationContext,
      RestDocumentationContextProvider restDocumentation) {
    this.mockMvc =
        MockMvcBuilders.webAppContextSetup(webApplicationContext)
            .apply(documentationConfiguration(restDocumentation))
            .build();
}

@Test
void signout() throws Exception {
    mockMvc.perform(RestDocumentationRequestBuilders.post("/v1/logout")
        .cookie(new Cookie(Constants.ACCESS_TOKEN_KEY, accessToken))
        .cookie(new Cookie(Constants.REFRESH_TOKEN_KEY, refreshTokenString)))
        .andExpect(status().isOk())
        .andExpect(
            result -> {
              Cookie accessTokenCookie = result.getResponse().getCookie("X-Access-Token");
              assertThat(accessTokenCookie.getMaxAge()).isZero();
              assertEquals("", accessTokenCookie.getValue());
            });
  }

 

답변 2

·

답변을 작성해보세요.

0

시큐리티 TDD 부분은 강의 범위를 넘어 제가 정확하게 가이드 해 드리기 어려운 점 양해 부탁드립니다.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.12.20

안녕하세요, 인프런 AI 인턴입니다.

Spring Security의 LogoutFilter를 포함하여 MockMvc 테스트를 구현할 때는 SpringBootTestAutoConfigureMockMvc를 사용하여 MockMvc 인스턴스를 자동 구성하는 것이 좋습니다. 이미 MockMvc를 사용하고 계신 것으로 보아 이러한 설정을 사용 중일 수 있습니다. 그러나 LogoutFilter 테스트 시 404 에러가 발생하는 경우, WebSecurityConfigurerAdapter를 상속받아 Security 관련 설정을 커스터마이즈한 클래스에서 로그아웃 처리 경로(/logout 등)를 올바르게 설정했는지 확인해야 합니다.

또한, MockMvc 테스트에서 @WebMvcTest, @SpringBootTest와 같은 어노테이션과 함께 @AutoConfigureMockMvc를 사용하는 경우, 실제 어플리케이션의 Spring Security 설정을 따르는 테스트 인스턴스가 생성되므로 별도로 LogoutFilter를 추가하지 않아도 됩니다. 만약 Security 설정이 테스트에 영향을 주지 않도록 하고 싶다면 @WebMvcTest(secure = false) 옵션을 사용할 수도 있습니다.

아래는 @AutoConfigureMockMvc를 사용하여 생성된 MockMvc로 LogoutFilter가 적용된 상황에서 테스트하는 예시입니다:

@SpringBootTest
@AutoConfigureMockMvc
public class LogoutFilterTest {

  @Autowired
  private MockMvc mockMvc;

  @Test
  public void signout() throws Exception {
    mockMvc.perform(post("/logout") // 여기서 "/logout"은 실제 로그아웃을 처리하는 경로와 일치해야 합니다.
        ...) // 필요한 요청 세부 내용
        .andExpect(status().isOk())
        ... // 기대하는 응답 검증
  }
}

추가적으로 필요한 설정이 있다면 MockMvcBuilders를 사용하여 설정을 직접 추가할 수 있지만, 이는 보통 필요한 경우가 드뭅니다. 스프링 시큐리티와 관련된 상세한 테스트 방법은 Spring Security 문서에서 제공하는 지침을 따르는 것이 가장 좋습니다. 해당 문서의 “Testing With Spring Security” 섹션을 참고하시면 도움이 될 것입니다.

추가적으로 Spring Boot의 기본 테스트 관련 문서는 다음과 같습니다:

강의를 통해 유용한 지식을 배우시길 바랍니다. 만약 추가적인 질문이 있으시다면 언제든 문의해 주세요.