📝오늘 공부한 것
- 스파르타코딩클럽 Spring 강의 - Spring Security, Validation 복습
알게 된 점❗
[Spring Security]
Spring 서버에 필요한 인증 및 인가를 위해 많은 기능을 제공해주는 프레임워크
[Filter Chain]
- Spring에서 모든 호출은 DispatcherServlet을 통과하게 되고 이후에 각 요청을 담당하는 Controller로 분배
- 이 때, 각 요청에 대해서 공통적으로 처리해야할 필요가 있을 때 DispatcherServlet 이전에 Filter단계가 필요
- Spring Security도 인증인가 처리를 위해 Filter를 사용, FIlterChainProxy를 통해 상세로직을 구현
[UsernamePasswordAuthenticationFilter]
- Spring Security의 필터인 AbstractAuthenticationProcessingFilter를 상속한 Filter
1. 사용자가 username과 password를 제출하면 UsernamePasswordAuthenticationFilter는 인증된 사용자의 정보가 담기는 인증 객체인 Authentication의 종류 중 하나인 UsenamePasswordAuthenticationToken을 만들어 AuthenticationManager에게 넘겨 인증을 시도
2. 실패하면 SecurityContextHolder를 비움
3. 성공하면 SecurityContextHolder에 Authentication을 세팅
[SecurityContextHolder]
SecurityContext는 인증이 완료된 사용자의 Auhentication를 저장
[Authentication(상세정보)]
현재 인증된 사용자를 나타내며 SucurityContext에서 가져올 수 있음
[UserDetailsService]
username/password 인증방식을 사용할 때 사용자를 조회하고 검증한 후 UserDatails를 반환. Custom하여 Bean으로 등록 후 사용가능
[UserDatails]
검증된 UserDatails는 UsernamePasswordAuthenticationToken타입의 Authentication을 만들 때 사용되며 해당 인증객체는 SecurityContextHolder에 세팅됨. Custom하여 사용가능
[*]
requestMatchers("/api/user/**").permitAll()
- 이 요청들은 로그인, 회원가입 관련 요청이기 때문에 비회원/회원 상관없이 누구나 접근이 가능
- 이렇게 인증이 필요 없는 URL들을 간편하게 허가
[Validation]
Java는 null값에 대한 접근에 대해 NullPointException이 발생하기 때문에 이러한 부분을 예방하기 위해 검증과정이 필요
[Bean Validation]
null확인 뿐 아니라 문자의 길이 측정과 같은 다른 검증 과정도 쉽게 처리할 수 있도록 함
@NotNull, @NotEmpty, @NotBlank, @Size, @Max, @Min, @Positive, @Negative, @Email, @Pattern 등,,
느낀 점🤔
다른 분들이 Security부분이 어렵다고 하셨는데, 역시나 어려웠다..근데 뭐 사실 다 어려워서 security가 특히 더 어려웠던 것도 못느꼈다....주륵....
그래도 개념에 익숙해지면 인증, 인가 부분을 짧은 코드로 쉽게 할 수 있을 것 같다
'TIL(Today I Learned)' 카테고리의 다른 글
TIL-230710(Github Organization에 IntelliJ로 프로젝트 올리기) (0) | 2023.07.10 |
---|---|
TIL-230707 (0) | 2023.07.07 |
TIL-230705(로그인 기능 구현하기) (0) | 2023.07.05 |
TIL-230704(회원가입 기능 구현하기) (0) | 2023.07.04 |
TIL-230703(윈도우/ EC2에 Spring, Database 연동하여 배포하기(1)) (0) | 2023.07.03 |