내 맴

[ Spring Security JWT ] 동작 원리/의존성 추가/설정 본문

개발 공부/Spring

[ Spring Security JWT ] 동작 원리/의존성 추가/설정

뺙사우르수 2025. 3. 7. 14:08
728x90

✅ JWT (Json Web Token)

토큰 기반의 인증 방식으로, 클라이언트가 로그인하면 서버에서 토큰을 발급하고, 이후 요청 시 해당 토큰을 사용하여 인증을 수행

 

 JWT 인증 프로세스

  1. 사용자 로그인 요청: 클라이언트가 아이디와 비밀번호를 입력하여 로그인 요청을 보냄.
  2. 서버에서 인증 후 JWT 발급: 입력된 정보가 올바르면, 서버는 JWT를 생성하여 클라이언트에 반환.
  3. 클라이언트가 JWT 포함하여 요청: 이후 요청 시 JWT를 HTTP 헤더에 포함하여 서버에 전달.
  4. 서버에서 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