JWT 다루기
- build.gradle에 JWT dependency를 추가한다.
- application.properties에 가서 추가할 부분 추가한다.
- JWTUtil을 만들어서 JWT 관련 기능을 동작하게 한다.
- JWT 관련 기능은 5가지가 있다.
- JWT 생성하기 - 생성할 때 사용자의 권한 정보를 넣는데 Key - Value 형식으로 정보를 넣는다. 확인할 때는 Key 값으로 확인하면 된다.
- 생성된 JWT를 Cookie에 저장하기
- Cookie에 들어있던 JWT 토큰을 Substring 한다. - 토큰의 시작값이 Bearer이 맞는지 확인하고 맞으면 순수 JWT를 반환하기 위해 Substring을 사용해서 Bearer을 잘라낸다.
- JWT를 검증한다. - secretKey에 key 값을 넣어서 JWT의 위변조를 확인한다.
- JWT에서 사용자 정보를 가져온다 - JWT에는 정보의 한 조각인 claim이 있는데 Key-Value 한쌍으로 되어 있다. secretKey를 사용해서 claims을 가져오고 거기에 담겨 있는 사용자 정보를 사용하게 된다.
필터
- Filter는 Web application 에서 관리된다.
- Client로부터 오는 요청과 응답에 대해서 최초/최종 단계의 위치다.
- 요청과 응답의 정보를 변경하거나 부가적인 기능을 추가할 수 있다.
- 주로 범용적으로 처리해야 하는 작업에 쓰인다. → 로깅, 보안 처리, 인증과 인가의 로직 처리(비즈니스 로직과 분리해서 관리할 수 있다.)
- Filter Chain은 Filter를 한 개가 아니라 여러 개가 Chain처럼 묶여서 처리될 수 있는 것이다.
Spring Security 프레임워크
- Spring 서버에 필요한 인증 및 인가를 위해 많은 기능을 제공해줘서 개발의 수고를 덜어준다.
- Spring Security와 Filter Chain
- Spring에서 모든 호출은 DispatcherServlet을 통과하고 각 요청을 Controller에 분배한다.
- 요청에 대해 공통적으로 처리해야할 필요가 있을 때 DispatcherServlet 이전 단계가 필요한데 그것이 Filter다.
- Spring Security가 인증이나 인가를 처리 할 때도 Filter를 사용한다. FilterChainProxy를 통해서 상세로직을 구현할 수 있다.
Spring Security 회원가입
- 위의 그림은 Form Login 기반 인증을 설명하는 그림이다.
- Form Login은 인증이 필요한 URL 요청이 들어왔을 때 인증이 되지 않으면 로그인 페이지를 반환하는 형태다.
Spring Security 로그인
- Spring Security를 사용하면 Client의 요청은 모두 Spring Security를 거치게 된다.
- 인증 / 인가 시에 성공하면 Controller로 Client 요청을 전달 하는데 Client 요청 + 사용자 정보가 전달된다.
- 인증 / 인가 시에 실패하면 Controller로 Client 요청이 전달되지 않는다. Client에 Error Response를 보낸다.
데이터 검증하기
- Validation - 검증과정으로 프로그래밍하는 데 있어 가장 중요한 부분 중 하나다.
- Spring에서는 null, 문자의 길이측정 등과 같은 다른 검증 과정도 쉽게 처리할 수 있게 Bean Validation을 제공한다.
- 여러 가지 Bean Validation이 있다.
- @NotNull - null 불가
- @NotEmpty - null, ""불가
- @Size - 문자 길이 측정
- @Max - 최댓값
- @Min - 최솟값
- @Email - 이메일 형식
- @Pattern - 정규표현식
'스터디일지 > PROJECT' 카테고리의 다른 글
[2주 프로젝트] Trello 프로젝트 - PART 1 배포하기 (0) | 2023.09.19 |
---|---|
[Java Spring] CascadeType.REMOVE와 orphanRemoval = true (0) | 2023.09.09 |
[Java Spring] 숙련 1 주차 강의 - PART 1 (0) | 2023.08.31 |
[Java Spring] 입문 2 주차 강의 - PART 2 (0) | 2023.08.30 |
[Java Spring] 입문 2 주차 강의 - PART 1 (0) | 2023.08.29 |