온라인 강의를 듣고 배운 점들을 기록한다.
Bcrpyt & BcryptPasswordEncoder
- Spring Security에서 제공하는 암호화 기법.
- 내부적으로 임의의 salt값을 이용해 평문을 다이제스트(암호문)로 변환한다.
- 즉 동일한 문자열에 대한 해시 결과가 매번 다르게 나온다.
- 그러므로 위 라이브러리에서 제공하는 해시 비교 메서드를 통해서 비교할 수 있다.
- Bcrpyt 라이브러리의 checkpw() 메서드를 통해 평문과 다이제스트를 비교할 수 있다.
- BcryptPasswordEncoder는 AuthenticationProvider의 인자 값(UserDetailServices, PasswordEncoder)의 PasswordEncoder의 구현체로 가장 사용 빈도가 높은 구현체다.
@ExceptionHandler
- @Controller, @RestController에서 발생한 특정 에러에 대해서 에러 발생 이벤트가 트리거 되었을 때 아래 메서드를 수행한다.
- Controller단에서 Errors 객체로 에러를 받거나, 커스텀 에러 클래스를 throw 할 때 로직을 구현할 수 있다.
- 보통 특정 에러가 발생했을 때 해당 에러에 대한 메시지를 담은 ResponseEntity를 정책에 따라 200, 400 형태로 반환할 때 사용한다.
@UtilityClass
- Lombok에서 제공하는 Spring Class 중 Utiliy(상수나 반복되는 메서드 등) Class에 명시하는 어노테이션
- 기본 생성자가 private으로 선언된다.
- 사실 사용하지 않는 경우도 있지만 컨벤션 룰에 따라서 사용해주면 클래스 정보에 대한 정보를 명시한다는 점에서 사용할 법하다.
@AppilcationRunner
- Spring 프로젝트를 시동할 때 run 메서드를 오버라이드 해 해당 메서드를 수행한다.
- CommandLineRunner와 다르게 문자열 기반이 아닌 객체 대상의 작업을 할 때 사용한다.
- 예를 들면 In-Memory-DB인 H2를 사용할 때 초기 데이터 삽입을 위한 Entity 생성 및 Repository.save()를 할 때 사용한다.
JWT 라이브러리 관련
- maven repository에는 JWT관련 의존성이 많이 있다.
- 그중 가장 다운로드 횟수가 많은 JWT 의존성의 경우 토큰의 만료 기한을 입력하는 expiresAt에 Date 객체가 입력된다.
- 일반적으로 시간 관련된 내용은 LocalDateTime을 사용한다.(조작이 편함)
- 그래서 LocalDateTime 객체를 Date로 변환해서 사용해야 하는데 그 방법이 다양하다.
- 가장 편리한 방법(으로 보이는 방법)은 아래와 같다.
// LocalDateTime 으로 연산하고 Date로 바꿔서 넣어주기
LocalDateTime expiredDateTime = LocalDateTime.now().plusMonths(1);
Date expiredDate = java.sql.Timestamp.valueOf(expiredDateTime);
- 하지만 다른 JWT 의존성 중 LocalDateTime을 인자로 받는 의존성도 있는 것을 확인했다.(jjwt)
- Rule에 맞게 사용하면 될 것 같다.
@RequestHeader
- Controller단에서 Header 정보를 문자열로 받아볼 수 있는 어노테이션.
- JWT 검증에 대한 부분을 Controller에서 하려 할 때 주로 사용한다.(원래는 Controller 진입 전에 Filter로 해결하는 것이 일반적으로 알고 있다)
'Programming' 카테고리의 다른 글
Docker 03 (0) | 2021.04.30 |
---|---|
M1 맥북에서 Linux Ubuntu 사용하기 with AWS EC2 (0) | 2021.04.29 |
Spring Study 01 (0) | 2021.04.27 |
Docker 02 (0) | 2021.04.23 |
Docker 01 (0) | 2021.04.23 |