[JAVA/SpringBoot] JWT - 1

이나영·2022년 4월 23일
0

Spring Boot

목록 보기
1/3

🔰JSON Web Token (JWT)

JWT는 RFC 7519 웹 표준으로 지정되어 있고, JSON 객체를 사용해서 토큰 자체에 정보들을 저장하고 있는 Web Token이다. 가볍고 간편하며 쉽게 적용할 수 있다.


1. JWT 소개, 프로젝트 생성

JWT의 구성

  • Header : Signature를 해싱하기 위한 알고리즘 정보가 담겨있음
  • Payload : 서버와 클라이언트가 주고받는, 시스템에서 실제로 사용될 정보에 대한 내용을 담고있음
  • Signature : 토큰의 유효성 검증을 위한 문자열 => 이 문자열을 이용하여 유효한 토큰인지 검증


JWT의 장점

  • 중앙의 인증서버, 데이터 스토어에 대한 의존성 없음, 시스템 수평 확장 유리
  • Base64 URL Safe Encoding을 이용하므로 URL, Cooke, Header에 모두 사용 가능

JWT의 단점

  • Payload의 정보가 너무 많아지면 트래픽이 증가, 데이터 설계를 다시 고려해야함
  • 토큰이 클라이언트에 저장되므로 서버에서는 클라이언트의 토큰을 조작할 수 없음

lombok 사용을 위해 Enable annotation processing에 체크해준다.



2. Security 설정, Data 설정

HelloController에서 /api/hello에 대한 정보

@RestController
@RequestMapping("/api")
public class HelloController {
    @GetMapping("/hello")
    public ResponseEntity<String> hello() {
        return ResponseEntity.ok("hello");
    }
}

/api/hello에 대한 요청의 권한을 어떻게 설정할지 정한다.

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests() // HttpServletRequest를 사용하는 요청들에 대한 접근제한을 설정하겠다는 의미
                .antMatchers("/api/hello").permitAll() // /api/hello에 대한 요청은 인증없이 접근 허용
                .anyRequest().authenticated(); // 나머지 요청들은 모두 인증되어야 함을 의미
    }
}

@ManyToMany, @JoinTable은 User객체와 Authority객체의 다대다 관계를 일대다, 다대일 관계의 조인 테이블로 정의한 것

Spring Boot가 data.sql을 찾아 쿼리를 실행하는 방법?
=> Spring Boot는 시작될 때 root classpath location에 위치한 schema.sql, data.sql 파일의 내용들을 수행하게 되어있다. 참고링크

💡application.yml 파일에서 defer-datasource-initialization 옵션을 true로 설정해줘야 Spring Boot시작 시 데이터베이스 초기화가 이루어진다.

local:8080/h2-console에 접속하면 h2 DB에 연결할 수 있는 화면이 나온다.



👀인프런 정은구 강사님의 <Spring Boot JWT Tutorial> 강의를 듣고 정리하였습니다 :)

profile
소통하는 백엔드 개발자로 성장하기

0개의 댓글