DefaultLoginPageGeneratingFilter의 목적
해당 필터는 DefaultSecurityFilterChain에 기본적으로 등록되는 필터로 아홉 번의 위치에 자리잡은 필터이다.
DefaultLoginPageGeneratingFilter의 기능은 이름을 통해 파악할 수 있듯,
로그인 설정에 대해서 GET 요청에 대해 "/login" 경로에 기본 로그인 페이지를 제공한다.
해당 필터는 로그인 설정에 의존하여 대게 사용하는 formLogin에서 커스텀 SecurityFilterChain 등록시 아래와 같은 설정을 통해서 사용하면 기본 제공하는 기능을 사용할 수 있으며, 커스텀 로그인 페이지를 사용할 경우 제외하면 된다.
// 기본 사용
http
.formLogin(Customizer.withDefaults());
// 커스텀 하더라도 아래와 같이 loginPage() 메소드를 다루지 않으면 기본 로그인 페이지 활성
http
.formLogin((login) -> login.loginPage("/커스텀경로"));
주요 로직
doFilter
private void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
throws IOException, ServletException {
// Error 파라미터가 있는 경우
boolean loginError = isErrorPage(request);
// 로그아웃 성공시
boolean logoutSuccess = isLogoutSuccess(request);
// 조건에 맞으면 로그인 페이지 발생 로직 실행
if (isLoginUrlRequest(request) || loginError || logoutSuccess) {
// 로그인 페이지 생성
String loginPageHtml = generateLoginPageHtml(request, loginError, logoutSuccess);
// 헤더 값 설정 및 바디 추가
response.setContentType("text/html;charset=UTF-8");
response.setContentLength(loginPageHtml.getBytes(StandardCharsets.UTF_8).length);
response.getWriter().write(loginPageHtml);
return;
}
// 조건이 아닌 경우 다음 필터 실행
chain.doFilter(request, response);
}
조건( Get요청에 대해 로그인 페이지 / 로그인 실패에 따른 재요청 / 로그 아웃 성공으로 인한 로그인 페이지 재요청 )에 따른
로그인 페이지 생성 및 반환을 doFilter에서 구현하고 있다.
한편, 조건에 부합하지 않다면 다음 필터로 실행
로그인 설정에 따른 활성화
로그인 형식에는 form / ouath2 / saml2 등 다양한 방식이 있는데,
설정에 따라서 페이지가 다르게 응답되도록 구현되었다.
그리고 기본 형식은 "/login" 경로로 Get 요청에 따른 응답을 한다.

'Spring > 시큐리티 기본원리' 카테고리의 다른 글
| 시큐리티 기본 원리( 18 ) - BasicAuthenticationFilter (1) | 2025.01.28 |
|---|---|
| 시큐리티 기본 원리( 17 ) - DefaultLogOutPageGeneratingFilter (0) | 2025.01.28 |
| 시큐리티 기본 원리( 15 ) - UsernamePasswordAuthenticationFilter / AbstractAuthenticationProcessingFilter / AuthenticationManager와 AuthenticationProvider (0) | 2025.01.27 |
| 시큐리티 기본 원리( 14 ) - LogoutFilter (0) | 2025.01.25 |
| 시큐리티 기본 원리( 13 ) - CsrfFilter (0) | 2025.01.24 |
댓글