사용자 인증 과정은 다음과 같다.

서버가 요청을 받으면 컨트롤러에 넘어가기 전에 Filter Chain을 거치게 된다. Spring Security는 여기서 인증 및 인가에 대한 처리를 진행한다.

SecurityContextHolder는 인증된 사용자의 세부정보를 저장하는 곳이다. Spring Security는 SecurityContextHolder가 비어있지 않으면 인증된 사용자라고 판단한다.

즉 JWT가 만약 유효하다면 SecurityContextHolder에 Authentication을 채워주어 이후엔 Filter Chain을 통과할 수 있도록 할 수 있다.
Authentication 내부의 Principal은 인증된 사용자의 정보를 담고 있다. principal은 UserDetail 인터페이스의 구현체 User을 extends한 UserPrinciple객체를 사용할 예정이다.
Credentials은 인증에 필요한 정보, Authorities는 인증된 사용자의 권한 정보를 담고 있다.
UsernamePasswordAuthenticationFilter앞에 넣을 예정정리하면 다음과 같다.
