폼 로그인 관련 API 를 어떻게 설정하고 각 기능에 대한 내용들을 살펴볼 것.
HttpServletRequest에서 이 값을 읽어 온다폼 인증은 사용자, 즉 클라이언트는 웹 폼을 통해 자격 증명, 사용자 이름과 비밀번호를 서버 측에 전달하고 Spring Security는 HttpServletRequest 에서 이런 사용자 이름과 비밀번호를 읽어와 인증 여부를 진행한다.

현재 그림을 살펴보면 클라이언트가 GET 방식으로 user URL 로 요청을 하고 있다. 그런데 만약 이 user 라는 요청 경로가 사용자의 인증을 필요로 하고 인증을 받지 못하면 이 user 의 자원에 접근하지 못한다고 가정해보자. 그러면 SecurityFilterChian 영역에서 일어난 모든 일들이 일어나게 된다.
그럼 먼저 Spring Security 가 가지고 있는 여러가지 필터 중에서 맨 마지막 필터인 AuthorizationFilter (권한 검사 필터) 가 있다. 이 필터가 요청에 대해서 현재 클라이언트, 즉 사용자가 유저 경로에 접근할 수 있는지 없는지를 결정한다. 현재 클라이언트가 인증을 받지 못했다면 필터는 접근 예외를 발생시킨다. 그게 AccessDeniedException 이다. 그러면 이 예외를 처리하는 필터가 따로 있다. 이 필터가 ExceptionTranslationFilter 이다. 이 필터가 여기서 발생한 예외를 받는다. 받아서 처리하는데 이 필터가 하는 여러 가지 일들 중에서 하나가 바로 인증을 받지 못한 사용자가 어떤 자원에 접근하려 했는데 그 자원이 인증을 필요로 하는 것. 그래서 예외가 발생했고 그 예외를 처리하는데 그 예외를 처리하는 방식 중의 하나가 바로 다시 인증을 받도록 인증 페이지, 즉 로그인 페이지로 이동시키는 역할을 여기서 하고 있다. 그게 AuthenticationEntryPoint 라는 인증 지점이다. 이 지점을 통해서 다시 시작할 수 있도록 해주는 것. 이때 로그인 페이지로 redirect를 하는 것. 그래서 로그인 페이지가 생성되고 이런 화면을 만나볼 수 있는 것. 여기서 user 와 password 를 다시 입력하고 로그인하게 되면 인증에 성공할 것. 인증에 성공하면 서버로 접근이 가능할 것. 이런 식으로 form 인증이 이루어지고 있다. 인증을 받은 이후로는 계속적으로 인증이 유지되어서 그 다음부터는 다시 로그인할 필요는 없다.
FormLoginConfigurer 설정 클래스를 통해 여러 API 들을 설정할 수 있다UsernamePasswordAuthenticationFilter 가 생성되어 폼 방식의 인증 처리를 담당하게 된다
formLogin() API 는 우리가 폼 인증을 위한 API 를 설정할 수 있는 기능이다. 보면 formLogin() 구성 설정 클래스를 통해 여러 API 들을 설정할 수가 있다. 여기 Configurer 설정 클래스가 나왔다. 내부적으로는 UserNamePasswordAuthenticationFilter 라는 인증 필터가 있다. 인증 필터가 생성되고 여기서 폼 방식의 인증 처리를 담당하게 된다. 이 부분은 다음 챕터에서 자세히 보도록 할 것. 인증 설정을 위한 API 를 어떻게 하는지를 보도록 하자. HttpSecurity 를 통해 우리는 접근할 수 있다. 그래서 formLogin API 가 있다. 이 API 를 설정하게 되면 그때 formLoginConfig 설정 클래스가 생성이 된다. 여기서 formLoginConfig 를 통해서 우리는 람다 형식으로 여러 API 를 설정할 수 있다. 하나씩 보도록 하자