본문 바로가기

카테고리 없음

[Spring Boot] Security6 JWT Token 설정 및 필터

 

 

build.gradle

    // JWT
    implementation 'io.jsonwebtoken:jjwt-api:0.11.5'
    runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.5'
    runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.11.5'

 

Security Config

        http
//                .securityContext((context) -> context.requireExplicitSave(false))
//                .sessionManagement((session) -> session.sessionCreationPolicy(SessionCreationPolicy.ALWAYS))
                .sessionManagement((session) -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
                .cors((cors) -> cors.configurationSource(new CorsConfigurationSource() {
                    @Override
                    public CorsConfiguration getCorsConfiguration(HttpServletRequest request) {
                        CorsConfiguration config = new CorsConfiguration();
                        config.setAllowedOrigins(Collections.singletonList("http://localhost:3000"));
                        config.setAllowedMethods(Collections.singletonList("*"));
                        config.setAllowCredentials(true);
                        config.setAllowedHeaders(Collections.singletonList("*"));
                        config.setExposedHeaders(Arrays.asList("Authorization"));
                        config.setMaxAge(3600L);
                        return config;
                    }
                }))

 

1. sessionManagement((session) -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))

이 코드는 Spring Security에서 세션 관리 방식을 설정합니다.

  • sessionManagement: 세션 관리 설정을 구성하기 위한 메서드입니다.
  • session.sessionCreationPolicy(SessionCreationPolicy.STATELESS): 세션 생성 정책을 무상태(Stateless)로 설정합니다.

SessionCreationPolicy는 네 가지 옵션을 가지고 있습니다:

  1. ALWAYS: Spring Security가 항상 새로운 HTTP 세션을 생성합니다.
  2. IF_REQUIRED: 필요한 경우에만 세션을 생성합니다 (기본값).
  3. NEVER: Spring Security가 세션을 생성하지 않지만, 이미 존재하는 세션은 사용합니다.
  4. STATELESS: Spring Security가 세션을 생성하거나 사용하지 않습니다. 대신, 모든 요청은 독립적이며 상태를 유지하지 않습니다.

STATELESS 설정은 RESTful API와 같은 무상태 서비스에 주로 사용됩니다. 세션을 사용하지 않으므로 서버는 클라이언트의 상태를 저장하지 않고, 모든 요청은 독립적으로 처리됩니다. JWT 같은 토큰 기반 인증 방식에서 많이 사용됩니다.

2. config.setExposedHeaders(Arrays.asList("Authorization"))

이 코드는 CORS 설정에서 특정 헤더를 클라이언트에 노출시키는 역할을 합니다.

  • config.setExposedHeaders(Arrays.asList("Authorization")): CORS 설정에서 Authorization 헤더를 노출시키도록 설정합니다.