Spring Security 302 Status 해결

Hyunsoo Kim·5일 전
0

에러 해결기

목록 보기
5/5
post-thumbnail

Spring Security를 로그인에 적용하던 중, 로그인을 성공하고 인증 객체가 제대로 생성이 되었음에도 302 상태 코드가 발생하여 다음 페이지로 넘어가지 않는 상황이 발생했다.

o.s.web.servlet.DispatcherServlet        : Completed 302 FOUND

문제 원인

1. Spring SecurityContext 인증 정보 손실

SecurityContext의 인증 정보는 기본적으로 HttpSession을 사용하여 저장되지만, 현재 컨트롤러에서 명시적으로 SecurityContext에 인증 정보를 설정했다. 그러나 이 설정이 리다이렉트 이후 HTTP 요청에 반영되지 않아 문제가 발생했다.

2. 세션 인증과 Spring Security의 인증 상태 간 불일치

HttpSession에 사용자의 정보를 저장했지만, Spring Security가 이를 인식하지 못한다. 따라서 다음 요청에서 인증된 사용자로 간주되지 않았다.

해결 방법

SecurityContextPersistenceFilter 활성화 및 세션 관리 개선

SecurityContextPersistenceFilter는 SecurityContext를 자동으로 관리해준다. 이를 위해 Spring Security 설정과 HttpSession을 적절히 연동해야 한다.

Config Security Filter Chain 메소드 수정

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
    http
            .securityContext(securityContext -> securityContext
                    .securityContextRepository(new HttpSessionSecurityContextRepository())
            );

    return http.build();
}

Controller 로그인 메소드 수정

SecurityContextHolder.getContext().setAuthentication(authentication);

결과

302 상태 코드는 발생하지만 저장된 세션을 활용할 수 있게 되면서 리디렉션을 통해 정상적으로 다음 페이지가 로딩되었다. 다음 페이지는 200 status로 떨어진다.

profile
다부진 미래를 만들어가는 개발자

0개의 댓글