AuthController 로그인 컨트롤러
@RequestMapping("/auths")
@GetMapping("/login-form")
@GetMapping("/access-denied")
@PostMapping("/login")
SecurityConfiguration 시큐리티 설정
filterChain(): SecurityFilterChain을 리턴
필터체인의 옵션 등을 설정하여 filterChain 빌드
보안 및 접근설정, 인증형태, 인증형태에 따른 기능설정,
URI 설정(로그인, 로그인실패, 로그아웃, 권한별 페이지등..) 등..
JavaConfiguration
MemberRepository와 PasswordEncoder를 받아 DBMemberService를 리턴
DBMemberService
implements MemberService
PasswordEncoder - 패스워드를 암호화하여 set.member
MemberRepository - member DB저장
HelloAuthorityUtils - member의 권한정보를 email로 생성해 DB저장
*주의: 권한'정보'를 생성/저장 한 것,
권한은 HelloUserDetails에서 생성, HelloUserDetailsService에서 적용
HelloUserDetailsService(핵심)
loadUserByUsername():
MemberRepository - username으로 조회
조회값으로 HelloUserDetails 생성
(이름, 패스워드, 권한 조회가 가능한 유사 검증된 토큰) -> Spring Security
HelloUserDetails
extends Member implements UserDetails
HelloUserDetailsService의 내부클래스HelloAuthorityUtils - createAuthorities(this.getRoles())
GrantedAuthority 목록 생성(UserDetails 오버라이딩)
HelloAuthorityUtils
List createAuthorities(String email) 권한 리스트 생성
List createAuthorities(List roles)
DB에 저장된 Role로 권한정보 생성
-> SimpleGrantedAuthority("ROLE_" + role)로 생성됨
Member
extends Auditable implements Principal
맴버로@ElementCollection리스트를 추가하여
맴버=User의 권한 정보 매핑 테이블 생성
HelloUserAuthenticationProvider
*AuthenticationProvider를 구현한 클래스가 Bean 등록되어 있다면 해당 클래스로 인증을 진행
UsernamePasswordAuthenticationToken.class.equals(authentication)
로 Username/Password 방식의 인증을 지원한다는 것을 Spring Security에 알림오버라이딩한 authenticate():
HelloUserDetailsService 객체 조회 -authentication의 패스워드와 비교
HelloUserDetailsService 객체 조회하여 authorities 생성
인증 토큰.authenticated(username, password, authorities) 리턴