728x90
DefaultLogoutPageGeneratingFilter
DefaultLogoutPageGeneratingFilter 목적
- 이 필터는
DefaultSecurityFilterChain
에 기본적으로 등록되는 필터로 열 번째에 위치한다. - 이 필터가 등록되는 목적은
GET /logout
경로에 대해 기본 로그아웃 페이지를 응답하는 역할을 수행한다. - 이 필터는 여러 로그인 설정에 의존한다.
formLogin
설정에서는 커스텀SecurityFilterChain
등록 시 아래와 같은 설정으로 사용할 수 있다.
// 기본 사용
http.formLogin(Customizer.withDefaults());
DefaultLogoutPageGeneratingFilter 클래스
public class DefaultLogoutPageGeneratingFilter extends OncePerRequestFilter {
}
주요 로직 : doFilterInternal
protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response,
FilterChain filterChain)
throws ServletException, IOException {
if (this.matcher.matches(request)) {
renderLogout(request, response);
} else {
if (logger.isTraceEnabled()) {
logger.trace(LogMessage.format(
"Did not render default logout page since request did not match [%s]",
this.matcher));
}
filterChain.doFilter(request, response);
}
}
로그아웃 페이지
기본 설정은 GET /logout 경로이다. 이 페이지는 다음과 같은 특징을 가진다
- Bootstrap 기반의 반응형 디자인을 사용한다.
- CSRF 토큰이 자동으로 포함된다.
- 로그아웃 확인 메시지를 표시한다.
- POST 방식으로 로그아웃을 처리한다.
성능 최적화를 위한 구현
DefaultLogoutPageGeneratingFilter 는 HTML 페이지 생성 시 성능을 고려하여 StringBuilder 를 사용한다.
- 문자열 연산의 효율성 향상
- 메모리 사용량 최적화
- GC 부하 감소
private void renderLogout(HttpServletRequest request, HttpServletResponse response)
throws IOException {
StringBuilder sb = new StringBuilder();
sb.append("<!DOCTYPE html>\n");
sb.append("<html lang=\"en\">\n");
sb.append(" <head>\n");
sb.append(" <meta charset=\"utf-8\">\n");
// ... 중략 ...
sb.append("</html>");
response.setContentType("text/html;charset=UTF-8");
response.getWriter().write(sb.toString());
}
구현상의 특징
- Bootstrap 프레임워크 활용
- 반응형 디자인 지원
- CDN을 통한 리소스 제공
- 보안 설정
- CSRF 토큰 자동 포함
- POST 방식의 로그아웃 처리
- XSS 방지를 위한 적절한 인코딩
- 사용자 경험
- 직관적인 UI 제공
- 명확한 로그아웃 확인 메시지
- 모바일 환경 지원
728x90
'시리즈 > Spring Security' 카테고리의 다른 글
RequestCacheAwareFilter (0) | 2025.05.18 |
---|---|
BasicAuthenticationFilter (0) | 2025.05.17 |
DefaultLoginPageGeneratingFilter (0) | 2025.05.15 |
UsernamePasswordAuthenticationFilter (0) | 2025.05.14 |
LogoutFilter (0) | 2025.05.13 |