내 맴
[ Spring Security JWT ] 동작 원리/의존성 추가/설정 본문
728x90
✅ JWT (Json Web Token)
토큰 기반의 인증 방식으로, 클라이언트가 로그인하면 서버에서 토큰을 발급하고, 이후 요청 시 해당 토큰을 사용하여 인증을 수행
✅ JWT 인증 프로세스
- 사용자 로그인 요청: 클라이언트가 아이디와 비밀번호를 입력하여 로그인 요청을 보냄.
- 서버에서 인증 후 JWT 발급: 입력된 정보가 올바르면, 서버는 JWT를 생성하여 클라이언트에 반환.
- 클라이언트가 JWT 포함하여 요청: 이후 요청 시 JWT를 HTTP 헤더에 포함하여 서버에 전달.
- 서버에서 JWT 검증: 서버는 JWT의 유효성을 검사하고, 유효하면 요청을 처리.

✅ 프로젝트 설정
Spring Boot 프로젝트를 생성하고, Gradle을 사용하여 의존성 추가
🔹 Gradle 의존성 추가
// build.gradle.kts
implementation("org.springframework.boot:spring-boot-starter-security")
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("io.jsonwebtoken:jjwt:0.11.5")
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
runtimeOnly("org.postgresql:postgresql") // DB 설정에 따라 변경
✅ Spring Security 기본 설정
기본적인 보안 설정을 위해 SecurityConfig 클래스 생성
🔹 SecurityConfig 설정
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public BCryptPasswordEncoder bCryptPasswordEncoder() {
return new BCryptPasswordEncoder();
}
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.csrf((auth) -> auth.disable());
http
.formLogin((auth) -> auth.disable());
http
.httpBasic((auth) -> auth.disable());
http
.authorizeHttpRequests((auth) -> auth
.requestMatchers("/login", "/", "/join").permitAll()
.anyRequest().authenticated());
http
.sessionManagement((session) -> session
.sessionCreationPolicy(SessionCreationPolicy.STATELESS));
return http.build();
}
}
- bCryptPasswordEncoder(): 비밀번호를 안전하게 저장하기 위해 BCrypt 해싱 사용.
- csrf().disable(): CSRF 보호 기능을 비활성화 (JWT를 사용하므로 필요 없음).
- formLogin().disable(): 기본 로그인 폼 비활성화.
- httpBasic().disable(): HTTP Basic 인증 비활성화.
- authorizeHttpRequests(): 특정 엔드포인트를 공개하고, 나머지는 인증 필요하도록 설정.
- sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS): JWT는 세션을 사용하지 않으므로 STATELESS 설정.
📌 참고 자료
https://www.devyummi.com/page?id=668d026e958b03acd4c248e7
개발자 유미 | 커뮤니티
www.devyummi.com
728x90