본문 바로가기
카테고리 없음

[Spring Boot] JWT 튜토리얼 [chap.4~5] - 인프런 강의

by bzerome240 2023. 7. 2.

이전 포스팅에 이어서...

 

외부와의 통신에 사용할 DTO 클래스 생성

 

dto > LoginDto.java

dto > TockenDto.java

dto > UserDto.java

 


 

Repository 관련 코드 생성

  • JpaRepository를 extends 하여 findall, save 등의 메소드를 기본적으로 사용한다.

 

repository > (I) UserRepository.java

  • @EntityGraph : 쿼리가 수행될 때 Eager 조회로 attributePaths 정보를 같이 가져온다.

 


 

관련 로직 생성

 

service > CustomUserDetailsService.java

  • Spring Security에서 중요한 부분인 UserDetailsService를 구현
  • UserDetailsService 를 implements 하고 UserRepository를 주입받는다.
  • loadUserByUsername 메소드를 오버라이드하여 로그인 시 DB에서 유저정보와 권한정보를 가져온다. 해당 정보를 기반으로 userdetails.User 객체를 생성해서 리턴

 


 

로그인 API 생성

 

contloller > AuthController.java

  • TockenProvider, AuthenticationManagerBuilder를 주입받는다.
  • @PostMapping("/authenticate")
    • 로그인 API 경로는 /api/authenticate이고 post 요청을 받는다.
    • LoginDto의 username, password를 통해 UsernamePasswordAuthenticationToken을 생성한다.
    • Authentication객체를 생성하고 이를 SecurityContext에 저장한다.
    • createToken() : Authentication 객체를 통해 JWT Token 생성
    • JWT Token을 Response Header에도 넣고, TokenDto를 이용하여 Body에도 넣어 return

 


 

확인 시 토큰이 정상적으로 리턴돼야한다

POST http://localhost:8080/api/authenticate

Request Body

{"username":"admin", "password":"admin"}

 

 


 

회원가입 API 생성

 

utll > SecurityUtil.java

  • getCurrentUsername() : Security Context의 Authentication 객체를 이용해 username을 리턴해주는 간단한 유틸성 메소드

service > UserService.java

  • UserRepository, PasswordEncoder를 주입받는다.
  • signup() : 회원가입 로직 수행
    • username 이 DB에 존재하지 않으면 Autority와 User 정보를 생성하여 save메소드를 통해 DB에 저장

controller > UserController.java

  • @PostMapping("/signup")
  • @GetMapping("/user") @PreAuthrize("hasAnyRole('USER', 'ADMIN')") : USER, ADMIN 권한 호출 허용
  • @GetMapping("/user/{username}") @PreAuthrize("hasAnyRole('ADMIN')") : ADMIN 권한만 호출 허용

 


 

회원가입 API 실행하기

POST http://localhost:8080/api/signup

{"username":"a1", "password":"a1", "nickname":"nickname"}

 

 

h2-console로 DB 확인

 

권한검증까지 호출해보면

완료!!!

 

 


 

참고

 

본문 내용 강의 

 

[무료] Spring Boot JWT Tutorial - 인프런 | 강의

Spring Boot, Spring Security, JWT를 이용한 튜토리얼을 통해 인증과 인가에 대한 기초 지식을 쉽고 빠르게 학습할 수 있습니다., - 강의 소개 | 인프런

www.inflearn.com

 

강의 Git

 

GitHub - SilverNine/spring-boot-jwt-tutorial

Contribute to SilverNine/spring-boot-jwt-tutorial development by creating an account on GitHub.

github.com

 

728x90
반응형

댓글