이전에 이미 403에러가 뜨는 경우를 만난적이 있어서 이전 블로그에 관련 내용을 쓴적이 있다
@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로 하느게 좋지 않을까 생각해본다