프로젝트 진행중에 처음으로 접해본 Spring Security 로그인 기능에 대해 정리가 제대로 되지 않은 느낌을 받음. 로그인에 사용되는 각 요소들과 그들의 연관관계를 제대로 파악하여 동작 원리에 대해서 정확히 이해하고 로그인의 전체적인 흐름을 그려보기 위해 정리를 함
로그인이 정상적으로 이루어지려면 클라이언트 측에서 보낸 ID / PW 가 DB 내에 존재하는 특정 회원의 ID / PW 와 일치해야함. 여기서 사용자가 보낸 데이터와 비교할 회원 정보를 DB 에서 조회해야 되는 데, 이 때 사용되는 것이 UserDetailService 인터페이스. 인터페이스이므로 implements 키워드를 이용하여 구현해야하는데, 보통 회원(Member)을 관리하는 Service 객체가 이를 구현함
UserDetailsService 인터페이스에서 오버라이딩을 수행해야 할 메소드. 사용자가 입력한 Username (ID)을 이용하여 실질적으로 DB 내에서 해당 값과 일치하는 회원(Member)을 조회하여 조회한 회원 정보를 UserDetails 인터페이스 타입으로 반환하는데, 보통 Spring Security 에서 제공하는 UserDetails 인터페이스 구현체인 User 객체를 반환함
SpringSecurityFilterChain 에 필터를 추가하기 위한 @Configuration 클래스. 애플리케이션의 보안 (인증 및 인가)을 위한 필터 및 설정을 지정하기 위해 여러 configure 메소드를 오버라이딩함
Http 요청에 대한 security 설정을 지정하는 메소드
.loginPage("/member/login") // 해당 URL의 Post 요청은 로그인으로 간주, 또는 로그인이 필요한 자원에 접근할 때 로그인이 되어있지 않다면 해당 페이지로 이동
.defaultSuccessUrl("/") // 로그인 성공 시 redirect URL
.usernameParameter("email") // Post 요청으로 들어오는 데이터중 "email" 데이터를 ID로 설정함
.failureUrl("/member/login/fail") // 로그인 실패 시 redirect URL
.and()
.logout() // 로그아웃 기능 수행
.logoutRequestMatcher(new AntPathRequestMatcher("/member/logout")) // 해당 URL 요청에 대해서 로그아웃 수행
.logoutSuccessUrl("/"); // 로그아웃 후 redirect URL
실제로 인증을 담당하는 AuthenticationManager 를 생성하는 메소드. http.formLogin() 에서 지정한 URL 로 로그인 요청이 들어오면 userDetailsService 에서 조회한 User 객체와 비밀번호의 암호화 방식을 이용하여 사용자가 보낸 ID / PW 와 비교해 실질적으로 로그인 검증을 수행하는 부분
로그인에 감사함을 느낌...