본문 바로가기
오류 처리/스프링시큐리티

[Spring Security] mock 테스트시 401 에러

by dal_been 2023. 11. 4.
728x90

이전에 이미 403에러가 뜨는 경우를 만난적이 있어서 이전 블로그에 관련 내용을 쓴적이 있다

 

https://velog.io/@haebing0309/WebMvcTest%EC%97%90%EC%84%9C-Spring-Security-%EC%A0%81%EC%9A%A9-403%EC%97%90%EB%9F%AC-csrf

 

@WebMvcTest에서 Spring Security 적용, 403에러 -csrf

스프링 시큐리티 적용한 Rest API Controller 테스트하다가 계속 403 에러가 나왔다. chatgpt에도 물어보고 에러를 검색해봐도 안나와서 스프링시큐리티 403에러 치니까 나오더라...일단 나의 코드를 설

velog.io

 

위 에러는 csrf()를 안해줘서 나는 에러였다

그래서 처음에  403에러가 나왔길래 아 이거 맞아 csrf() 때문이다 했느데 401에러....

또 한시간을 찾아 헤맸다... 근데 생각보다 해결은 간단했다.

 

 

일단 테스트한 코드를 설명하자면 신규가입이었다. 그래서 security cofig에는 해당 url를 permitAll()를 했기에 http(postman)같은 테스트에서는 에러가 나지 않았다.

근데 왜 mocktest를 실행하면 에러가 나왔을까..??

 

찾아보니

 

@WithMockUser(roles = "USER") 어노테이션 이 없었기때문이었다.

 

근데 분명 permitAll()를 한 url인데 이게 왜 필요할까..? 라는 생각이 들어고민해보았느데...

 

test 자체에서 내가 설정한 security config를 반영하지 못한 것같다.

 

 

 

일단 나는 @WithMockUser?로 roles ={"CUSTOMER"} 로설정한다음에 test를 돌려봤다. 그랬더니 성공....

 

두번째 security config가 반영하지 못하고 있다고..? 그럼 @Import(Securit.class)를 붙여봤다..그랬더니 성공....

 

 

결과적으로 생각해보면 test자체에서는 내가 설정한 Security Config가 적용되지 않아 401,403에러가 나왔던 것 같다

 

그래서 결론은@Import를 해주던가 어떤 권한이든 부여해서 @WithMockUser를 하면 해결되는 것같다.

 

다만 @WithMockUser는 새로 가입하는 사람에게 갑자기 내가 권한을 부여하는것이기때무넹 @Import로 하느게 좋지 않을까 생각해본다