로그인 프로세스 포스팅
로그인 기능을 구현하는 방식
들어가기 전
이 글은 로그인 예제 프로젝트를 진행하면서 핵심적인 부분들, 예제에서 알려준 로직에 대해 메모한 글이다.
로그인 로직에 대해서 지식이 이미 있다면 이 글은 추천하지 않는다.
로그인 기능 청사진

스프링 시큐리티
Spring 애플리케이션의 보안(인증, 인가, 권한)을 담당하는 Spring 하위 프레임워크이다.
Spring Security를 사용하면 인증과 인가에 대한 관리 기능을 쉽게 구현할 수 있다.
특징
- Spring Security는 Spring 애플리케이션의 보안 프레임워크
- 애너테이션 설정이 매우 간편함
- CSRF,session flxtion 공격을 방어해줌
session flxtion은 세션에 들어있는 사용자의 인증 정보를 탈취하거나 변조하는 공격을 말함
-
요청 헤더를 보안처리 해줌
Spring Security Filter Chain 구조

위 사진을 보면서 원하는 위치에 Custom Filter를 만들어 원하는 위치에 Filter Chain을 연결해줄 수 있다
| 필터명 | 설명 |
|———-|———-|
| SecurityContextPersistenceFilter | SecurityContextRepository에서 SecurityContext(접근 주체와 인증에 대한 정보를 담고 있는 객체)를 가져오거나 저장하는 역할을 합니다 |
| Logoutfilter | 설정된 로그아웃 URL로 오는 요청을 확인해 해당 사용자를 로그아웃 처리합니다 |
| UsernamePasswordAuthenticationFilter | 인증 관리자입니다. 폼 기반 로그인을 할 때 사용되는 필터로 아이디, 패스워드 데이터를 파싱해 인증 요청을 위임합니다.
인증이 성공하면 AuthenticationSuccessHandler를
인증에 실패하면 AuthenticationFailureHandler를
실행합니다 |
| DefaultLoginPageGeneratingFilter | 사용자가 로그인 페이지를 다로 지정하지 않았을 때 기본으로 설정하는 로그인 페이지 관련 필터입니다. |
| BasicAuthenticationFilter | 요청 헤더에 있는 아이디와 패스워드를 파싱해서 인증 요청을 위임합니다.
인증이 성공하면 AuthenticationSuccessHandler를
인증에 실패하면 AuthenticationFailureHandler를
실행합니다 |
| RequestCacheAwareFilter | 로그인 성공 후, 관련 있는 캐시 요청이 있는지 확인하고 캐시 요청을 처리해줍니다. 예를 들어 로그인하지 않은 상태로 방문했던 페이지를 기억해두었다가 로그인 이후에 그 페이지로 이동 시켜줍니다. |
| SecurityContextHoldlerAwareRequestFilter | HttpServletRequest 정보를 감쌉니다. 필터 체인 상의 다음 필터들에게 부가 정보를 제공하기 위해 사용합니다. |
| AnonymousAuthenticationFilter | 필터가 호출되는 시점까지 인증되지 않았다면 익명 사용자 전용 객체인 AnonymousAuthentication을 만들어 SecurityContext에 넣어줍니다. |
| SessionManagementFilter | 인증된 사용자와 관련된 세션 관련 작업을 진행합니다. 세션 변조 방지 전략을 설정하고, 유효하지 않은 세션에 대한 처리를 하고, 세션 생성 전략을 세우는 등의 작업을 처리합니다. |
| ExceptionTranslationFilter | 요청을 처리하는 중에 발생할 수 있는 예외를 위임하거나 전달합니다. |
| FilterSecurityInterceptor | 접근 결정 관리자입니다. AccessDecisionManager로 권한 부여 처리를 위임함으로써 접근 제어 결정을 쉽게 해줍니다. 이 과정에서는 이미 사용자가 인증되어 있으므로 유효한 사용자인지도. 즉, 인가 관련 설정을 할 수 있습니다. |
—-
체크하고 넘어갈 Security Filter 동작
- UsernamePasswordAuthenticationFilter
- ID와 PASSWORD가 로그인 요청과 같이 넘어오면 인증 요청을 위임하는 인증 관리자 역할을 한다.
- FilterSecurityInterceptor
- 권한 부여 처리를 위임해 접근 제어 결정을 쉽게 하는 접근 결정 관리자 역할을 한다.
- 사용자가 폼 기반의 로그인 요청을 보냈을 때 Security의 동작
- 사용자가 폼에 아이디와 패스워드를 입력하면 HTTPServletRequest에 아이디와 비밀번호 정보가 전달된다.
- 유효성 검사가 끝나면 실제 구현체인 UsernamePasswordAuthenticationToken을 만들어 넘겨줌
- 전달받은 인증용 객체인 UsernamePasswordAuthenticationToken을 AuthenticationManager에게 보냄.
- UsernamePasswordAuthenticationToken을 AuthenticationProcider에 보냄
- 사용자 아이디를 UserDetailService에 보냄
- UserDetailService는 사용자 아이디로 찾은 사용자의 정보를 UserDetails 객체로 만들어 AuthenticationProvider에게 전달 함
- DB에 있는 사용자 정보를 가져옵니다.
- 입력 정보와 UserDetails의 정보를 비교해 실제 인증 처리를 합니다.
- 인증이 완료되면 SecurityContextHolder에 Authentication을 저장하고 인증 성공 여부에 따라 성공하면 AuthenticationSuccessHandler를 실패하면 AuthenticationFailureHandler를 실행합니다.