Spring

시큐리티 요청 흐름 with GPT

99duuk 2024. 12. 25. 15:49

시큐리티는 완존히 문외한이라 뭔 얘길 해도 알아먹을 수가 없다

공부...를 ... 해야... 한...다.....

 

틀릴 수도 있음... 


1. 클라이언트 요청

  • 사용자가 애플리케이션에 요청(예: /profile 경로).

2. FilterChain을 통한 요청 처리

  • 요청은 Spring Security의 FilterChain을 통과
  • 주요 필터:
    • SecurityContextPersistenceFilter: 기존 SecurityContext를 복원
    • UsernamePasswordAuthenticationFilter: 사용자 인증 처리(예: 로그인 요청 처리).
    • 기타 필터: 권한 확인, 세션 관리, CSRF 보호 등 추가 작업 수행.

3. AuthenticationProvider를 통한 인증

  • AuthenticationManagerAuthenticationProvider를 호출
    • 인증 방식(예: Username/Password, OAuth 등)에 따라 적절한 AuthenticationProvider가 선택
  • 인증 과정:
    1. 사용자가 입력한 정보를 검증
    2. 인증 성공 시, Authentication 객체를 반환

4. Authentication 객체 저장

  • 인증 성공 시:
    • 반환된 Authentication 객체는 SecurityContext에 저장
    • SecurityContext는 SecurityContextHolder를 통해 애플리케이션 어디에서든 접근 가능

5. DispatcherServlet으로 요청 전달

  • Spring Security 필터 체인을 통과한 요청은 DispatcherServlet으로 전달
    • DispatcherServlet은 요청을 적절한 컨트롤러로 라우팅

6. Controller에서 Authentication 사용

  • 컨트롤러 메서드에서 @AuthenticationPrincipal로 Principal 객체를 바로 사용할 수 있음
    • 이 객체는 Authentication 객체 내부에 있는 사용자 정보임
@GetMapping("/profile")
public String getProfile(@AuthenticationPrincipal CustomUserDetails userDetails) {
    return "Welcome, " + userDetails.getFullName();
}

 

클라이언트 요청

FilterChain 처리

AuthenticationProvider 인증

Authentication 저장 (SecurityContextHolder)

DispatcherServlet이 요청 처리

Controller에서 요청 처리 및 사용자 정보 접근