728x90
반응형
옥탑방개발자 님의 강의를 보고 정리한 내용입니다
폼 로그인
DefaultLoginPageGeneratingFilter
- GET /login 을 처리
- 별도의 로그인 페이지 설정을 하지 않으면 제공되는 필터
- 기본 로그인 폼을 제공
- OAuth2 / OpenID / Saml2 로그인과도 같이 사용할 수 있음.
UsernamePasswordAuthenticationFilter
- POST /login 을 처리. processingUrl 을 변경하면 주소를 바꿀 수 있음.
- form 인증을 처리해주는 필터로 스프링 시큐리티에서 가장 일반적으로 쓰임.
- 주요 설정 정보
- filterProcessingUrl : 로그인을 처리해 줄 URL (POST)
- username parameter : POST에 username에 대한 값을 넘겨줄 인자의 이름
- password parameter : POST에 password에 대한 값을 넘겨줄 인자의 이름
- 로그인 성공시 처리 방법
- defaultSuccessUrl : alwaysUse 옵션 설정이 중요
- successHandler
- 로그인 실패시 처리 방법
- failureUrl
- failureHandler
- authenticationDetailSource : Authentication 객체의 details 에 들어갈 정보를 직접 만들어 줌.
@Override public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException { if (this.postOnly && !request.getMethod().equals("POST")) { throw new AuthenticationServiceException("Authentication method not supported: " + request.getMethod()); } String username = obtainUsername(request); username = (username != null) ? username : ""; username = username.trim(); String password = obtainPassword(request); password = (password != null) ? password : ""; UsernamePasswordAuthenticationToken authRequest = new UsernamePasswordAuthenticationToken(username, password); // Allow subclasses to set the "details" property setDetails(request, authRequest); return this.getAuthenticationManager().authenticate(authRequest); }
DefaultLogoutPageGeneratingFilter
- GET /logout 을 처리
- POST /logout 을 요청할 수 있는 UI 를 제공
- DefaultLoginPageGeneratingFilter 를 사용하는 경우에 같이 제공됨.
LogoutFilter
- POST /logout 을 처리. processiongUrl 을 변경하면 바꿀 수 있음.
- 로그 아웃을 처리
- session, SecurityContext, csrf, 쿠키, remember-me 쿠키 등을 삭제처리 함.
- (기본) 로그인 페이지로 redirect
private void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException { if (requiresLogout(request, response)) { Authentication auth = SecurityContextHolder.getContext().getAuthentication(); if (this.logger.isDebugEnabled()) { this.logger.debug(LogMessage.format("Logging out [%s]", auth)); } this.handler.logout(request, response, auth); this.logoutSuccessHandler.onLogoutSuccess(request, response, auth); return; } chain.doFilter(request, response); }
- LogoutHandler
- void logout(HttpServletRequest request, HttpServletResponse response, Authentication authentication);
- SecurityContextLogoutHandler : 세션과 SecurityContext 를 clear 함.
- CookieClearingLogoutHandler : clear 대상이 된 쿠키들을 삭제함.
- CsrfLogoutHandler : csrfTokenRepository 에서 csrf 토큰을 clear 함.
- HeaderWriterLogoutHandler
- RememberMeServices : remember-me 쿠키를 삭제함.
- LogoutSuccessEventPublishingLogoutHandler : 로그아웃이 성공하면 이벤트를 발행함.
- LogoutSuccessHandler
- void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication)
throws IOException, ServletException; - SimpleUrlLogoutSuccessHandler
- void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication)
728x90
'프로그래밍 > Spring Security' 카테고리의 다른 글
[Spring Security] 스프링 시큐리티 Authentication 메커니즘 (0) | 2023.04.27 |
---|---|
[Spring Security] 스프링 시큐리티 Authentication (인증)의 기본 구조 (0) | 2023.04.27 |
[Spring Security] 큰 그림으로 보는 스프링 시큐리티 (0) | 2023.04.27 |
[Spring Security] 스프링 시큐리티란? (0) | 2023.04.27 |