본문 바로가기

개발 Error

Request requested invalid session id

Request requested invalid session id 에러

2024-09-11T20:04:00.954+09:00 DEBUG 3692 --- [JejuTravel-BE] [nio-8080-exec-6] o.s.s.w.session.SessionManagementFilter  : Request requested invalid session id 1083270A16241BCA37BBD96A322B993D

 

세션 관리를 STATELESS로 설정했기 때문에 세션이 전혀 사용되지 않는 상태입니다. 따라서 세션을 통해 accessToken을 저장하고 사용하려면 SessionCreationPolicy.STATELESS를 수정해야 합니다.

 

세션을 허용하도록 SessionCreationPolicy 변경: 세션을 사용하기 위해서는 STATELESS가 아닌 IF_REQUIRED 또는 **ALWAYS**로 설정해야 합니다.

 

@EnableMethodSecurity
@RequiredArgsConstructor
@Configuration
public class SecurityConfig {
    private final JwtAuthenticationFilter jwtAuthenticationFilter;
    private final AuthenticationEntryPoint entryPoint;

    private final String[] allowedUrls = { "/api/auth/signin", "/api/auth/signup",
            "api/v1/create/event", "api/v1/events", "api/v1/event", "api/v1/update/event", "api/v1/delete/event",
            "/api/v1/busStop", "/api/v1/publicWifi", "/api/v1/publicToilet",
            "/api/v1/busStop/search", "/api/v1/publicWifi/search", "/api/v1/publicToilet/search",
            "/api/v1/restaurant", "/api/v1/restaurant/search",
            "/api/v1/shopping", "/api/v1/shopping/search",
            "/api/v1/stay", "/api/v1/stay/search",
            "/api/v1/tourism", "/api/v1/tourism/search", "/api/v1/**" }; // 허용할 URL 목록

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        return http
                .cors(corsCustomizer -> corsCustomizer.configurationSource(new CorsConfigurationSource() {
                    @Override
                    public CorsConfiguration getCorsConfiguration(HttpServletRequest request) {
                        CorsConfiguration config = new CorsConfiguration();
                        config.setAllowedOrigins(Collections.singletonList("http://localhost:5173"));  // 허용할 도메인 설정
                        config.setAllowedMethods(Collections.singletonList("*"));  // 모든 HTTP 메서드 허용
                        config.setAllowCredentials(true);  // 인증 정보를 포함할 수 있도록 설정
                        config.setAllowedHeaders(Collections.singletonList("*"));  // 모든 헤더 허용
                        config.setExposedHeaders(Collections.singletonList("New-Access-Token"));  // 노출할 헤더 설정
                        config.setMaxAge(3600L);  // 캐시 유지 시간
                        return config;
                    }
                }))
                .csrf(CsrfConfigurer<HttpSecurity>::disable)  // CSRF 비활성화 (필요시 설정)
                .headers(headers -> headers.frameOptions(FrameOptionsConfig::sameOrigin))
                .authorizeHttpRequests(requests -> requests
                        .requestMatchers(allowedUrls).permitAll()  // 허용된 URL 목록에 대한 요청 허용
                        .anyRequest().authenticated())  // 그 외 모든 요청은 인증 필요
                // 세션 관리 설정을 수정
                .sessionManagement(sessionManagement -> 
                        sessionManagement.sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED))  // 세션이 필요할 때 생성
                .addFilterBefore(jwtAuthenticationFilter, BasicAuthenticationFilter.class)  // JWT 필터 추가
                .exceptionHandling(handler -> handler.authenticationEntryPoint(entryPoint))  // 인증 오류 핸들링
                .build();
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();  // 비밀번호 암호화 설정
    }
}