사용자 인증 과정은 다음과 같다.
서버가 요청을 받으면 컨트롤러에 넘어가기 전에 Filter Chain을 거치게 된다. Spring Security는 여기서 인증 및 인가에 대한 처리를 진행한다.
SecurityContextHolder
는 인증된 사용자의 세부정보를 저장하는 곳이다. Spring Security는 SecurityContextHolder가 비어있지 않으면 인증된 사용자라고 판단한다.
즉 JWT가 만약 유효하다면 SecurityContextHolder
에 Authentication을 채워주어 이후엔 Filter Chain을 통과할 수 있도록 할 수 있다.
Authentication 내부의 Principal
은 인증된 사용자의 정보를 담고 있다. principal은 UserDetail
인터페이스의 구현체 User
을 extends한 UserPrinciple
객체를 사용할 예정이다.
Credentials
은 인증에 필요한 정보, Authorities
는 인증된 사용자의 권한 정보를 담고 있다.
UsernamePasswordAuthenticationFilter
앞에 넣을 예정정리하면 다음과 같다.