jwt 토큰 발급 방식스프링에서 제공하는 인증과 권한 보안 관련 기능을 제공하는 프레임워크이다.
Principal
SecurityContextHolder
Authentication
GrantedAuthority
Spring Security의 내부 구조는 서블릿 필터 체인이다. 즉, 클라이언트 요청이 서블릿(controller)에 도달하기 전에 여러 개의 필터를 거치며 보안 검사를 수행한다. 또한 사용자는 이 필터를 커스텀해 사용할 수 있다.
DelegatingFilterProxy
FilterChainProxy
AuthenticationFilter
AuthenticationManager
AuthenticationProvider
UserDetailsService
Login
{"email": "user@test.com", "password": "1234"}
JwtAuthenticationFilter
AuthorizationFilter
SecurityConfig의 설정을 확인/api/auth/login 주소는 permitAll()(모두 허용)이네?

AuthController
LoginRequest)를 검증(@Valid)UserService.login()을 호출new UsernamePasswordAuthenticationToken(email, password)
UserDetailsService 호출
PasswordEncoder

UserDetailsService
UserRepository를 통해 DB(users 테이블)를 조회UserDetails라는 포맷으로 포장해서 제공Password Encoder
matches() 메서드가 돌아가고 “일치함!” 판정인증 성공 기록
Authentication) 발급SecurityContext 에 정식 신분증을 잠시 저장UserService로 돌아가서 실제 JWT 토큰 발급 받음Posting

POST /api/posts 요청을 보냈을 때Request Header: { Authorization: "Bearer eyJhb..." }
JwtAuthenticationFilter 의 토큰 검증
JwtTokenProvider에게 토큰 유효한지 질문Security Context 에 신분증 저장
Authentication 객체를 만들어 저장AuthorizationFilter 의 규칙 확인
POST /api/posts)은 `인증된 사람만 가능하네SecurityContextHolder 를 열어볼게
DispatcherServlet
PostController의 write() 메서드를 호출PostService
service.write(dto)를 호출SecurityContextHolder 를 열어볼게유저가 보낸 토큰은
Authentication) 으로 변환SecurityContext) 에 저장되고,