- 스프링 시큐리티, JWT를 적용할 때 만든 클래스가 너무 많아서, 클래스와 클래스가 가진 메서드, 멤버 클래스 이름만 정리했다. 하지만 여전히 어렵고 복잡하다,,
손으로 한 번 적어보긴 했지만, 여기에도 중요해보이는 클래스 위주로 조금 적어봐야겠다.
- SecurityConfiguration
- 스프링 시큐리티에서 전체 시큐리티 체인을 설정하는 가장 중요한 클래스로 생각됨
- SecurityFilterChain filterChain(HttpSecurity http) throws Exception{}
- PasswordEncoder passwordEncoder(){}
- CorsConfigurationSource corsConfigurationSource(){}
- class CustomFilterConfigurer extends AbstractHttpConfigurer<CustomFilterConfigurer, HttpSecurity> {configure()}
- CustomUserDetailsService
- AuthenticationProvider에게 UserDetails를 넘겨주는 역할
- UserDetails loadUserByUsername(String username) throws UsernameNotFoundException{}
- private class MemberDetails extends Member implements UserDetails{}
- CustomAuthorityUtils
- 권한 생성 및 저장 클래스
- List< GrantedAuthority> createAuthorities(List< String> roles){}
- List< String> createRoles(String email){}
- JwtTokenizer
- JWT 토큰 생성 및 검증 클래스
- String encodeBase64SecretKey(String secretKey){}
- String generateAccessToken(){}
- String generateRefreshToken(){}
- Jws< Claims> getClaims(){}
- void verifySignature(){}
- Date getTokenExpiration(){}
- Key getKeyFromBase64EncodedKey(String base64EncodedSecretKey){}
- JwtAuthenticationFilter
- AuthenticationFilter 클래스
- Authentication attemptAuthentication(){}
- void successfulAuthentication(){}
- String delegateAccessToken(){}
- String delegateRefreshToken(){}
- JwtVerificationFilter
- 클라이언트의 리퀘스트에 포함된 JWT 토큰 검증 클래스
- boolean shouldNotFilter(){}
- void doFilterInternal(){}
- Map<String, Object> verifyJws(){}
- void setAuthenticationToContext(){}


- 기타
- Plain Text를 Secret Key로 사용하지 않는다. Key는 항상 바이너리(byte array)이기 때문.
- Secret Key의 byte[]를 Base64 형식의 문자열로 인코딩
- Username/Password 기반의 로그인 인증은 OncePerRequestFilter 등 Spring Security에서 지원하는 Filter를 이용해서 구현 가능하며, Controller의 REST API 엔드포인트로도 구현 가능.
- JWT에서 Claims를 파싱 가능 == 내부적으로 서명(Signature) 검증 성공
- SimpleGrantedAuthority 객체를 생성할 때 생성자 파라미터로 넘겨주는 값은 “ROLE_USER" 형태.