본문 바로가기
Test

CSRF CookieCsrfTokenRepository MockMvc 테스트

by Gil Granger 2019. 5. 8.

세션으로 인증하기 않기 때문에 CSRF 적용의 경우 고민을 한끝에 CookieCsrfTokenRepository 를 사용하게 되었다.

 

 

SecurityConfig extends WebSecurityConfigurerAdapter

 

쿠키에 CSRF방지 토큰을 저장하여 인증을 하게 된다.

 

쿠키CSRF 방지에 대한 테스트 케이스를 작성하고 개별로 실행했을때는 문제가 없었지만

 

다른 테스트들과 같이 실행해보니 CSRF발급 인증에서 에러가 발생하는것을 발견하였다.

 

로그를 보니 Cookie CSRF 토큰이 발급이 안되는 것이었다.

 

request 로그를 찍어보면 

 

세션에 CSRF토큰이 생성되고 있지 않은가..!

 

소스를 까보니..

 

spring-security-test:5.1.4 SecurityMockMvcRequestpostProcessors.CsrfRequestPostProcessor

 

다른 테스트 케이스에서 csrf()를 실행하여 인증을 하다보니 TestCrsfTokenRopository가 아니면 기본적으로 HttpSessionCsrfTokenRepository으로 대체하여 사용되고 있었던 것이다.

 

 

방법은 다시 Repoisotry를 바꿔주는 수밖에 없다.

 

Spring Test MockMvc

이와 같이 MockHttpServletRequestBuilder를 이용하여 대체 하면 된다.

 

 

 

 

csrf()로 인증해야되는 부분이 조금 아쉽다.

 

물론 CSRF 세션으로 사용하는것은 테스트만을 위해 사용하기 때문에 문제는 되지 않는다.

 

댓글