스터디일지/PROJECT

[Java Spring] 숙련 1 주차 강의 - PART 2

똥쟁이핑크 2023. 9. 1. 23:49

JWT 다루기

  1. build.gradle에 JWT dependency를 추가한다.
  2. application.properties에 가서 추가할 부분 추가한다.

 

  • JWTUtil을 만들어서 JWT 관련 기능을 동작하게 한다.
  • JWT 관련 기능은 5가지가 있다.
    1. JWT 생성하기 - 생성할 때 사용자의 권한 정보를 넣는데 Key - Value 형식으로 정보를 넣는다. 확인할 때는 Key 값으로 확인하면 된다.
    2. 생성된 JWT를 Cookie에 저장하기
    3. Cookie에 들어있던 JWT 토큰을 Substring 한다. - 토큰의 시작값이 Bearer이 맞는지 확인하고 맞으면 순수 JWT를 반환하기 위해 Substring을 사용해서 Bearer을 잘라낸다.
    4. JWT를 검증한다. - secretKey에 key 값을 넣어서 JWT의 위변조를 확인한다.
    5. JWT에서 사용자 정보를 가져온다 - JWT에는 정보의 한 조각인 claim이 있는데 Key-Value 한쌍으로 되어 있다. secretKey를 사용해서 claims을 가져오고 거기에 담겨 있는 사용자 정보를 사용하게 된다.

 

필터

 

https://img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcIdVKp%2FbtscPc25d1v%2Fpu0UZAGIxY7t601cKmH410%2Fimg.png

  • Filter는 Web application 에서 관리된다.
  • Client로부터 오는 요청과 응답에 대해서 최초/최종 단계의 위치다.
  • 요청과 응답의 정보를 변경하거나 부가적인 기능을 추가할 수 있다.
  • 주로 범용적으로 처리해야 하는 작업에 쓰인다. → 로깅, 보안 처리, 인증과 인가의 로직 처리(비즈니스 로직과 분리해서 관리할 수 있다.)

 

https://blog.kakaocdn.net/dn/3hMmQ/btrDeDsIepe/wyH5H7UyTGKNn7n7TUK2j0/img.png

  • Filter Chain은 Filter를 한 개가 아니라 여러 개가 Chain처럼 묶여서 처리될 수 있는 것이다.

 

Spring Security 프레임워크

  • Spring 서버에 필요한 인증 및 인가를 위해 많은 기능을 제공해줘서 개발의 수고를 덜어준다.
  • Spring Security와 Filter Chain
    • Spring에서 모든 호출은 DispatcherServlet을 통과하고 각 요청을 Controller에 분배한다.
    • 요청에 대해 공통적으로 처리해야할 필요가 있을 때 DispatcherServlet 이전 단계가 필요한데 그것이 Filter다.
    • Spring Security가 인증이나 인가를 처리 할 때도 Filter를 사용한다. FilterChainProxy를 통해서 상세로직을 구현할 수 있다.

 

Spring Security 회원가입

 

https://blog.kakaocdn.net/dn/dQVFyg/btq2MPJMftY/AR2mW6kWQkQ0RbavV1tek0/img.png

  • 위의 그림은 Form Login 기반 인증을 설명하는 그림이다.
  • Form Login은 인증이 필요한 URL 요청이 들어왔을 때 인증이 되지 않으면 로그인 페이지를 반환하는 형태다.

 

Spring Security 로그인

스파르타코딩 자료 숙련 1주차 자료

  • 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 - 정규표현식