SpringBootProject/SringBoot_JWT_RestApi

Chaptor.01 - 스프링부트 기초세팅 + 스프링 시큐리티 설정 + Hello API 생성

ironmask431 2022. 4. 1. 22:19

 

서버와 클라이언트가 같은 세션 ID 를 공유하는 방식의 기존의 세션 로그인 방식은

서버가 각 클라이언트들의 세션ID를 서버의 별도 공간에 저장해야 한다는 점 때문에 여러가지 제한 사항들이 있다. 

(서버의 저장공간 필요, 서버가 여러 대 일 경우 세션 클러스터링 필요.  각 서비스별로 별도 로그인 필요등)

JWT 로그인 방식은 서버에서 클라이언트에게 토큰을 발급 한 후  별도로 저장 해 놓을 필요가 없기 때문에

세션 로그인 방식에 비해 여러가지 장점을 가지고 있다. (물론 단점도 있다.) 

이번 실습으로 JWT 토큰 인증 방식을 REST API 적용하는 방법을 익히고자 한다. 

 

목적 :

  1. SpringSecurity + JWT 토큰인증 구축해보기
  2. JWT 토큰인증방식을 REST API 에 적용해보기
  3. JPA 활용 공부
  4. JUNIT 테스트 코드 작성 공부
  5. Swagger로 API문서 만들어보기
  6. Docker로 도커 이미지파일 생성, 로컬 에서 구동해보기

기능 :

  1. JWT 토큰인증을 이용한 회원가입, 로그인(토큰발급), 상품조회, 유저조회, 주문하기 REST API 제공

개발환경

  • 언어 : java 11
  • 프레임워크 : springboot 2.6.4
  • 빌드도구 : gradle 7.4.1
  • 개발도구 : Intellij IDEA (Community Edition)
  • ORM : JPA
  • 데이터베이스 : h2
  • 인증방식 : Spring Security + JWT
  • 테스트 : Junit 4.13.1
  • api문서 : Swagger 2.9.2

 

<진행 할 것>

- 스프링부트 기초 세팅 
- Hello API 생성
- 401 Unauthorized 해결을 위한 security 설정 

 

 

1. https://start.spring.io/ 접속

- springboot/java-version/project meta-data 설정 
- 추가할 dependency 선택 

 

 

2. generate로 zip파일 다운로드 / 압축해제

 

3. 인텔리제이에서 압축해제한 폴더 open 한 후 gradle build >  successful 확인

 

4. lombok를 사용하기 때문에 설정 > annotation proceccers >  Enable annotation processing CHECK필요 

 

 

5. controller 패키지생성 + HelloController 작성

/**
 * 테스트 API 컨트롤러
 */
@RestController
@RequestMapping("/api/hello")
public class HelloController {
    @GetMapping("/hello")
    public ResponseEntity<String> hello(){
        return ResponseEntity.ok("hello");
    }
}

 

6. 포스트맨 실행 + http://localhost:8080/api/hello 실행

 

7. 401 Unauthorized 결과 확인

8. config 패키지 생성 > securityConfig.java 생성 

 

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    //http 요청에대한 권한 제한 설정
    @Override
    protected void configure(HttpSecurity http) throws Exception {

        http
                .authorizeRequests()
                .antMatchers("/api/hello/**").permitAll() //hello 테스트  > 전체허용
                .anyRequest().authenticated()
    }
}

9. 구동후 postman 재확인 > hello 응답 확인.