본문 바로가기
Today I Learned 2024. 5. 22.

(24.05.22)[6주차] Spring 숙련 강의 02

난이도가 점점 높아지면서 이해하고 소화시키는데 약간 무리가 있어서 학습시간이 과하게 늘어지는 경향이 있다.

이럴 수록 정신을 좀 차려서 집중할 수 있도록 학습 환경 구성이 필요하다고 생각


Spring 숙련 강의 간단정리

  • 이번 강의에서는 Spring Security Framework에서의 formLogin과 JWT를 사용하는 Customization, 그리고 권한 설정과 검증 Validation에 관한 내용에 대해서 학습
  • 이를 파악하기 위해서 SecuritycontextHolder 구조를 이해하고 사용을 할 수 있고, Filter를 사용해야 하는 부분이 여러 패키지 사이를 움직이면서 작동하는 것이기 때문에 매우 복잡하고 난이도가 있게 느껴졌다
    • 반드시 2, 3회를 더 강의와 개인 Notion 노트를 보고 복습을 진행을 해야하는 부분
  • 권한을 부여하고, 권한을 검증하는 부분은 서로 다른 부분이긴 하지만, 같은 기능을 하기 때문에 묶어서 크게 기능상으로 볼 필요가 있다고 생각.

 

더보기

Spring Security Framework

  • 'Spring' 프레임워크가 웹 서버 구현에 편의를 제공해주는 것 처럼 인증 및 인가에 대한 기능을 제공
  • ***Spring Security는 Session 방식으로, 요청 받은 SessionID(클라이언트에서 만들어진)을 저장해서 이후의 요청 받은 SessionID(=JSONID)를 비교를 해서 인증처리를 해주는 방식

 

Spring Security - Filter Chain

  • Spring에서 모든 호출은 DispatcherServlet을 통과하게 되고 이후에 각 요청을 담당하는 Controller 로 분배되는 것은 기초에서 학습한것
  • 이 때 각 요청에 대해서 공통적으로 처리해야할 필요가 있을 때 DispatcherServlet 이전에 단계를 필터
    • 그 부분이 SecurityFilterChain

Spring Security - Form Login 인증 방식

  • URL 요청이 들어왔을 때 인증이 되지 않았다면 로그인 페이지를 반환하는 형태

UsernamePasswordAuthenticationFilter

  • 내부 인증 처리 필터

SecurityContextHolder의 구성

SecurityContextHolder

  • Form Login 기반을 사용할 때 username 과 password 확인하여 인증 필터
  • UsernamePasswordAuthenticationToken은 위의 Authentication에 들어가는 것

Authentication

  • 대개 사용자를 식별하는데 사용, SecurityContext에서 가져와서 사용하게 되는 것
  • principal
    • 사용자를 식별
    • Username/Password 방식으로 인증할 때 일반적으로 UserDetails, 인스턴스 아래 UserDetailsService 확인
  • credentials
    • 주로 비밀번호, 대부분 사용자 인증에 사용한 후 비워버림
  • authorities
    • 사용자에게 부여한 권한을 GrantedAuthority로 추상화하여 사용
    • 권한에따라서 요청을 처리할지 말지를 위해서 존재

UserDetailsService

  • username/password 인증방식을 사용할 때 사용자를 조회하고 검증한UserDetails를 반환

UserDetails

  • UsernamePasswordAuthenticationToken 타입의 Authentication를 만들 때 사용

Spring Security : Login

Spring Security 의 인증/인가

  • Success : Controller 로 Client 요청 전달
    • Client Reponse 요청 + 사용자 정보 (UserDetails)
  • Failure : Controller 로 Client에게 Error Response

Spring Security의 권한 Authority 설정

  • 회원 상세정보 (UserDetails) 를 통해 "권한 (Authority)" 설정
    • UserDetails 저장된 authorities 값을 사용하여 간편하게 권한을 제어
  • 권한을 1개 이상 설정 가능

Spring Security의 권한 Authority 제어

  • Controller 에 **@Secured**애너테이션으로 권한 설정이 가능

Validation

  • 예외에 대한 검증

Bean Validation

  • 검증을 간단하게 할 수 있는 Annotation을 제공

 


이것저것 해야하는 일도 생기고 이번주 금요일 까지는 Spring의 보안관련 숙련주차를 훝어보는 것으로 마무리짓고 싶은데

아무래도 몇번 더 보고 학습을 해야한다고 생각을 한다.

 

+ 건강이 좀 무리가 가는것 같아 컨디션 조절도 필수