나의 개발일지
[트러블 슈팅] Spring 환경에서 @WebMvcTest를 활용한 컨트롤러 테스트 진행하기 - 403 forbidden 오류 해결 본문
Language/SpringBoot
[트러블 슈팅] Spring 환경에서 @WebMvcTest를 활용한 컨트롤러 테스트 진행하기 - 403 forbidden 오류 해결
사각분무기 2024. 4. 5. 11:41백엔드 스쿨이 끝이 났습니다.
이제 모든 공부를 혼자서 진행해야 한다고 생각하니 낯섭니다.
옆에서 같이 공부하고 있는 사람도 없어 마음이 헤이해질까봐 두렵네요.
마음을 다잡기 위해서, 그리고 코드 복기를 위해서 테스트 코드를 작성 중에 있습니다.
GetMapping 엔드 포인트들의 대한 테스트를 작성하는 과정에서 여러가지 오류가 많았습니다.
AOP 허용 설정을 따로 해줘야 된다는 것은 꽤 충격적이었죠.
본 개발 환경에서는 기본 설정이라 필요 없지만 테스트 환경을 위해 Application 클래스 위에 @EnableAspectJAutoProxy(proxyTargetClass = true) 를 입력해줘야 한다니 주객이 전도된 기분입니다.
그리고 또 문제가 발생했습니다.
문제
기존의 401 는 권한이 없음을 나타내는 것이었다면 이번의 403 는 금지되었다는 의미의 메세지를 반환합니다.
원인 파악
403 은 꽤 익숙합니다.
csrf 문제로 게시판을 제작하는 사이드 프로젝트를 진행할 당시 해당하는 문제로 한참을 고생했던 적이 있습니다.
csrf 는 쿠키나 세션에 권한을 저장한 사용자가 해당 권한을 필요로 하는 악의적인 명령문을 실행시키는 주소를 누르도록 유도하는 해킹 방식입니다.
해결
private ResultActions performPayByCash(final Long reserveId, final UseCouponRequest useCouponRequest) throws Exception {
return mockMvc.perform(post(baseUrl + "/{reserveId}/byCash", reserveId)
.content(objectMapper.writeValueAsString(useCouponRequest))
.header(AUTHORIZATION, MEMBER_TOKENS.getAccessToken())
.cookie(COOKIE)
.contentType(APPLICATION_JSON)
.with(csrf())); // csrf 토큰 설정
}
ResultActions 를 생성하는 메소드 체이닝 과정 중에 .with(csrf()) 를 추가해줌으로써 해결했습니다.
'Language > SpringBoot' 카테고리의 다른 글
| [트러블 슈팅] Projections 를 활용하여 Enum 변수를 정제한 DTO 생성하기 (0) | 2024.04.25 |
|---|---|
| [트러블 슈팅] AssertJ 를 통해 CustomException 내에 추가로 정의한 필드 테스트 (1) | 2024.04.19 |
| [SpringBoot] WebClient 비동기 흐름 내 Transaction 비활성화 트러블슈팅 - 2 ( 문제 발생 및 해결 ) (0) | 2024.02.22 |
| [SpringBoot] WebClient 비동기 흐름 내 Transaction 비활성화 트러블슈팅 - 1 ( 토스페이먼츠 WebClient 로 구현 ) (0) | 2024.02.22 |
| [SpringBoot] Page와 PageImpl (0) | 2024.02.21 |