- 사용자가 서버에 특정 URL을 요청하면 해당 URL이 인증이 필요한 경우 서버는 Login 페이지를 return
- 사용자가 username과 password를 입력하여 로그인 요청을 하면 해당 데이터가 서버에 전송됨
- 서버는 해당 로그인 정보를 확인 후 해당 유저 정보가 존재한다면 Session과 Token을 생성하고 저장
- 이런 과정을 거친 후 사용자가 원래 접속하려던 url에 접속 요청을 할 경우 세션에 저장된 인증 토큰으로 접근할 수 있게 되며 세션에 인증토큰이 있는 동안은 해당 사용자가 인증된 사용자가 됨.
protected void configure(HttpSecurity http) throws Exception {
http.formLogin()
.loginPage(“/login.html") // 사용자 정의 로그인 페이지
.defaultSuccessUrl("/home) // 로그인 성공 후 이동 페이지
.failureUrl("/login.html?error=true“) // 로그인 실패 후 이동 페이지
.usernameParameter("username") // 아이디 파라미터명 설정
.passwordParameter(“password”) // 패스워드 파라미터명 설정
.loginProcessingUrl(“/login") // 로그인 Form Action Url
.successHandler(loginSuccessHandler()) // 로그인 성공 후 핸들러
.failureHandler(loginFailureHandler()) // 로그인 실패 후 핸들러
}
Form Login을 사용하게 된다면 인증 필터인 UsernamePasswordAuthenticationFilter가 실행
AntPathRequestMatcher가 요청정보를 체크해서 일치하지 않으면 Filter로 보냄
일치하면 username과 password 정보가 담긴 Authentication 객체를 생성해서 AuthenticationManager에 넘김
AuthenticationManager는 이전 과정에서 받은 Authentication 객체를 AuthenticationProvider에 넘김
AuthenticationProvider는 실직적으로 인증을 체크.
인증에 성공하면 인증된 Authentication 객체를 생성
AuthenticationManager 가 인증된 Authentication 객체를 넘김
최종 Authentication 객체가 Security Context에 저장
이후에는 SecurityContextHolder.getContext().getAuthentication()코드를 통해 인증객체를 꺼내 쓸 수 있음.