해당 포스팅에서는 서버를 배포한 후 웹 페이지에 최초 접속할 때 발생한 문제와 그 해결 과정에 대해 다루고자 한다.
배포된 서버에서 최초 접속 시 인증이 필요하지 않은 매핑 주소임에도 불구하고 무조건 로그인 페이지로 리다이렉트되는 문제가 발생했다. 하지만 다시 해당 매핑 주소로 접속하면 더 이상 로그인 페이지로 리다이렉트되지 않았다.
최초 접속 시 한 번만 해당 현상이 발생하는 점에서 캐시나 세션의 상태 등이 관련되어 있을 것이라고 생각했다.
제일 먼저 AWS EC2 인스턴스의 시간 설정을 한국 시간으로 변경하여 서버의 시간과 클라이언트의 시간이 동기화되도록 했다. 시간 불일치로 인한 세션의 만료 시간이나 쿠키의 만료 시간과 관련된 문제일 수 있다는 점을 고려하여 이를 조정해보았지만, 문제를 해결하지 못했다.
스프링 시큐리티 설정 클래스를 확인한 결과, 세션 관리 부분에서 세션이 유효하지 않을 때 리다이렉트할 URL이 "/login"으로 설정되어 있는 것을 발견했다. 이로 인해 최초 접속 시 세션이 아직 생성되지 않은 상태에서 로그인 페이지로 리다이렉트되었던 것이다.
이후 세션 만료 시 리다이렉트 URL을 "/login"에서 "/"로 수정함으로써 최초 접속 시 로그인 페이지로 리다이렉트되는 문제를 해결할 수 있었다.
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.sessionManagement(
session -> session
.sessionCreationPolicy(SessionCreationPolicy.ALWAYS) // 세션 생성 정책 설정
.invalidSessionUrl("/login") // 세션이 유효하지 않을 때 리다이렉트할 URL
.maximumSessions(1) // 최대 동시 세션 수
.expiredUrl("/login")); // 세션이 만료된 경우 리다이렉트할 URL
}
}
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.sessionManagement(
session -> session
.sessionCreationPolicy(SessionCreationPolicy.ALWAYS) // 세션 생성 정책 설정
.invalidSessionUrl("/") // 세션이 유효하지 않을 때 리다이렉트할 URL
.maximumSessions(1) // 최대 동시 세션 수
.expiredUrl("/login")); // 세션이 만료된 경우 리다이렉트할 URL
}
}