API 서비스 (아이디 중복 확인 구현) 개발 후 테스트를 진행하던 중에 계속해서 403 오류가 났습니다.
이에 대한 해결 과정을 잊어버리기 전에 기록해봅니다.
⭕ build.gradle에서 Springboot version 3.2.1로 업그레이드
3.2.0의 고질적인 문제라고 하여 아래의 두 가지를 수정해주었습니다.
- build.gradle 파일에서 Springboot 버전 3.2.1 로 업그레이드
plugins {
id 'java' // java 프로젝트로 설정
id 'org.springframework.boot' version '3.2.1' // 3.2.1 버전의 스프링 부트로 설정
id 'io.spring.dependency-management' version '1.1.4' // 스프링 부트의 의존성 관리 플러그인을 사용
}
⭕ CSRF 추가
WebSecurityConfig에서 http.csrf(csrf -> csrf.disable()) 를 추가해줬습니다.
이렇게 두 가지를 수정해주었더니 정상적으로 테스트 해볼 수 있었습니다.
🧐 CSRF (Cross Site Request Forgery) 란?
그렇다면 CSRF란 무엇일까요?
'사이트 간 요청 위조' 라는 뜻으로, 다른 오리진을 가진 사이트에서 form 요청을 보내는 것 입니다.
일반 사용자가 악의적인 공격자에 의해 CRUD 등의 행위를 특정 웹사이트에 요청하도록 만드는 공격입니다.
이를 방어하기 위해서는 다양한 방법이 있으며, 스프링 시큐리티의 애노테이션인 @EnableWebSecurity는 기본적으로 CSRF 공격을 방지하는 기능을 지원합니다.
즉, 스프링 시큐리티가 적용되면서 CSRF 공격 방어가 활성화되어 이로 인해 다른 사이트의 요청으로 인지한 것 입니다.
그래서 스프링 시큐리티의 CSRF 방지 기능을 비활성화 하는 http.csrf().disable(); 또는 http.csrf(csrf -> csrf.disable());
명령어가 필요합니다.
하지만 실제로 애플리케이션을 배포할 경우엔 이 방법은 권장하지 않습니다!
테스트 시에 csrf() 메서드를 추가하는 방법도 있습니다.
'Project 댕린이집' 카테고리의 다른 글
[트러블슈팅] HttpMediaTypeNotSupportedException (0) | 2024.02.21 |
---|---|
[트러블슈팅] java.sql.SQLSyntaxErrorException: Unknown column (0) | 2024.02.14 |
[React] Register.js 아이디 중복 체크 구현 (0) | 2024.02.07 |
[React] Login.js UI 구현 (0) | 2024.02.06 |
[React] Register.js 회원가입 페이지 UI 구현 (0) | 2024.02.05 |