JWT 소개
- JSON 객체를 사용해서 토큰 자체에 정보들을 저장하고 있는 Web Token
- Header, Payload, Signature 3개의 부분으로 구성
1) Header : Signature를 해싱하기 위한 알고리즘 정보들이 담겨 있음
2) Payload : 서버와 클라이언트가 주고받는, 시스템에서 실제로 사용될 정보에 대한 내용들이 담겨 있음
3) Signature : 서버에서 토큰의 유효성 검증을 위한 문자열
- JWT는 중앙의 인증서버와 데이터 스토어에 대한 의존성이 없기 때문에 시스템 수평 확장에 유리한 장점을 가지며
Base64 URL Safe Encoding을 이용하기 때문에 URL, Cookie, Header 등 어디에서든 모두 사용 가능한 범용성을 가짐 - Payload의 정보가 많아지면 네트워크의 사용량이 증가하므로 데이터 설계 고려가 필요하다는 단점을 가지며
토큰이 각 클라이언트에 저장되기 때문에 서버에서 클라이언트의 토큰을 조작할 수 없음
프로젝트 생성
- spring initializr에서 프로젝트 생성
- Lombok을 사용하기 위해 인텔리제이 설정 어노테이션 설정
- Rest API 테스트 생성
// main/java/me/gagyeong/tutorial/controller/HelloController.java
@RestController // Rest API를 위한 어노테이션
@RequestMapping("/api")
public class HelloController {
@GetMapping("/hello")
public ResponseEntity<String> hello() { // 간단한 문자열을 리턴해주는 API
return ResponseEntity.ok("hello");
}
}
- - @Contoller
Model 객체를 만들어 데이터를 담고 View를 찾는 것
- @RestController
@Controller와 @ResponseBody의 조합으로 RESTful 웹서비스를 쉽게 개발하기 위해 추가되었으며
단순히 객체만을 반환 하고 객체 데이터를 JSON 또는 XML 형식으로 HTTP 응답에 담아서 전송
- ResponseEntity
Spring이 제공하는 클래스 중 HttpEntity 클래스가 존재하며 이를 상속받아 구현한 클래스
HttpRequest에 대한 응답 데이터를 포함하는 클래스로 HttpStatus, HttpHeaders, HttpBody를 포함하며
상태코드, 헤더, 응답데이터를 담는 생성자도 존재하므로 이를 사용해 클라이언트에게 응답을 보낼 수 있음
참고) [스프링 입문] 스프링 웹 개발 기초 - Postman을 이용해 테스트할 경우 401 Unauthorized 에러 응답 리턴
이를 해결하기 위해 Security 설정과 데이터 설정들이 필요
참고 영상 및 사이트
더보기
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-jwt/dashboard
@Controller와 @RestController의 차이점
https://dncjf64.tistory.com/288
ResponseEntity란 무엇인가?
https://devlog-wjdrbs96.tistory.com/182
'Java-Spring > Spring Boot JWT Tutorial' 카테고리의 다른 글
Spring Boot JWT Tutorial - 목차 (0) | 2023.07.03 |
---|---|
[Spring Boot JWT Tutorial] 회원가입, 권한검증 (0) | 2022.01.23 |
[Spring Boot JWT Tutorial] DTO, Repository, 로그인 (0) | 2022.01.23 |
[Spring Boot JWT Tutorial] JWT 코드, Security 설정 추가 (0) | 2022.01.23 |
[Spring Boot JWT Tutorial] Security 설정, Data 설정 (0) | 2022.01.22 |