본문 바로가기

TIL(Today I Learned)

TIL-230706

📝오늘 공부한 것

  • 스파르타코딩클럽 Spring 강의 - Spring Security, Validation 복습

 

알게 된 점❗ 

[Spring Security]

Spring 서버에 필요한 인증 및 인가를 위해 많은 기능을 제공해주는 프레임워크

 

[Filter Chain]

- Spring에서 모든 호출은 DispatcherServlet을 통과하게 되고 이후에 각 요청을 담당하는 Controller로 분배

- 이 때, 각 요청에 대해서 공통적으로 처리해야할 필요가 있을 때 DispatcherServlet 이전에 Filter단계가 필요

- Spring Security도 인증인가 처리를 위해 Filter를 사용, FIlterChainProxy를 통해 상세로직을 구현

 

[UsernamePasswordAuthenticationFilter]

- Spring Security의 필터인 AbstractAuthenticationProcessingFilter를 상속한 Filter

1. 사용자가 usernamepassword를 제출하면 UsernamePasswordAuthenticationFilter는 인증된 사용자의 정보가 담기는 인증 객체인 Authentication의 종류 중 하나인 UsenamePasswordAuthenticationToken을 만들어 AuthenticationManager에게 넘겨 인증을 시도

2. 실패하면 SecurityContextHolder를 비움

3. 성공하면 SecurityContextHolderAuthentication을 세팅

 

[SecurityContextHolder]

SecurityContext는 인증이 완료된 사용자의 Auhentication를 저장

 

[Authentication(상세정보)]

현재 인증된 사용자를 나타내며 SucurityContext에서 가져올 수 있음

 

[UserDetailsService]

username/password 인증방식을 사용할 때 사용자를 조회하고 검증한 후 UserDatails를 반환. Custom하여 Bean으로 등록 후 사용가능

 

[UserDatails]

검증된 UserDatailsUsernamePasswordAuthenticationToken타입의 Authentication을 만들 때 사용되며 해당 인증객체는 SecurityContextHolder에 세팅됨. Custom하여 사용가능

 

[*]

requestMatchers("/api/user/**").permitAll()

- 이 요청들은 로그인, 회원가입 관련 요청이기 때문에 비회원/회원 상관없이 누구나 접근이 가능

- 이렇게 인증이 필요 없는 URL들을 간편하게 허가

 

[Validation]

Javanull값에 대한 접근에 대해 NullPointException이 발생하기 때문에 이러한 부분을 예방하기 위해 검증과정이 필요

 

 

[Bean Validation]

null확인 뿐 아니라 문자의 길이 측정과 같은 다른 검증 과정도 쉽게 처리할 수 있도록 함

@NotNull, @NotEmpty, @NotBlank, @Size, @Max, @Min, @Positive, @Negative, @Email, @Pattern ,,

 

 

느낀 점🤔

다른 분들이 Security부분이 어렵다고 하셨는데, 역시나 어려웠다..근데 뭐 사실 다 어려워서 security가 특히 더 어려웠던 것도 못느꼈다....주륵....

그래도 개념에 익숙해지면 인증, 인가 부분을 짧은 코드로 쉽게 할 수 있을 것 같다