SecurityConfig
에서 세션 없을 경우 내가 만든 로그인 페이지로 이동 설정
어떤 상황?
- 사용자가 인증되지 않은 상태(로그인하지 않았거나, 세션 만료 등)에서 보호된 URL(
/main
,/mypage
, 등)에 접근할 경우
- 기본 설정에서는 Spring Security가 자동으로 제공하는 기본 로그인 페이지(
"/login"
)로 리다이렉트됨
- 하지만 우리는 자체 제작한 로그인 페이지가 있으므로 해당 URL로 리다이렉트되도록 설정이 필요함
SecurityConfig
에서 커스터마이징한 부분
http.formLogin(form -> form
.loginPage("/login-form") // 인증 안된 경우 이동할 나만의 로그인 페이지
.loginProcessingUrl("/login") // 로그인 form의 action
.defaultSuccessUrl("/main") // 로그인 성공 시 이동할 페이지
);
이 설정이 중요한 이유
1. 기본 동작은 우리가 원하는 UX를 보장하지 않음
- Spring Security는 인증되지 않은 요청에 대해 자동으로 기본 로그인 폼을 보여줌
- 하지만 이 기본 폼은 우리가 커스터마이징한 페이지가 아니므로 UI/UX가 깨짐
2. 세션이 없을 경우 invalidSessionUrl
을 통해 명시적으로 처리
- 사용자가 로그인 이후 일정 시간 활동이 없거나 브라우저 종료 등으로 세션이 사라졌다면
- 다시 보호된 페이지에 접근 시 예외 발생 → 이때 우리가 원하는 에러 안내 페이지 or 로그인 페이지로 이동시켜야 함
3. 인증 안된 경우에도 우리가 만든 페이지로 유도
- 사용자가
/main
으로 직접 접근해도SecurityConfig
덕분에/login
으로 유도됨
- 즉, Spring Security의 필터 체인이 요청을 가로채고,
SecurityContextHolder
에 인증 정보가 없을 경우 커스텀 페이지로 보내줌
Share article