inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 시큐리티

LogoutFilter MockMVC 테스트 질문

293

imoliviarla

작성한 질문수 1

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());
            });
  }

 

java spring-boot spring-security

답변 2

0

정수원

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

0

인프런 AI 인턴

안녕하세요, 인프런 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의 기본 테스트 관련 문서는 다음과 같습니다:

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

시큐리티 공부 버전 질문

0

175

1

[해결 방법] MethodSecurityConfig.customMethodSecurityMetadataSource() 호출하지 않는 이슈

0

186

1

AbstractSecurityInterceptor.class.beforeInvocation()를 2번 실행하는 경우

0

174

1

강의 코드가 왜이렇게 뒤죽박죽인가요...

0

249

1

메인 페이지로 접속해도 login url로 리다이렉트가 되지 않습니다..

0

236

1

파라미터값이 넘어가지 않습니다 ....

0

374

1

security filterChain 설정 질문이 있습니다.

0

332

1

소스 부분 질문 드립니다.

0

208

2

섹션4 7번 강의 문제가 있는거 같네요.

0

344

2

파일이 수시로 이름이 바껴있네요 ㄷㄷ

0

304

1

HttpSessionSecurityContextRepository를 사용안하는 문제

0

555

2

error , exception 이 잘 안됩니다.

0

282

2

thymeleaf tag 질문합니다.

0

196

2

버전업하면서 deprecated된 것들이 너무많아요

0

478

1

spring security 패치 관련

0

437

1

모바일을 사용할때 토큰말고 세션

0

846

2

DB 연동한 인가 부분에 대한 질문입니다!

0

264

1

Ajax방식도 똑같이 Session방식을 사용하는건가요?

0

307

1

Config 파일 생성 시 질문이 있습니다.

0

225

1

강사님 몇일동안 구글 검색만 100개 했는데도 이유를 모르겠습니다..

1

429

2

403 에러 뜹니다.

0

813

2

login_proc의 존재에 대한 간략한 설명입니다

0

276

1

top.html에 로그인 링크를 만들어서 로그인을 해봤습니다

0

283

2

안녕하세요. DB에 저장될 때 이해 안 가는 값이 있어서 질문드립니다!

0

189

1