반응형
[ JWT ] JWT란 무엇일까?
JWT.IO JSON Web Tokens are an open, industry standard RFC 7519 method for representing claims securely between two parties. jwt.io JWT(JSON Web Token) ✏️ JWT란 무엇인가? JWT는 RFC 7519 웹 표준으..
choppadontbiteme.tistory.com
JWT
✏️ [ 목표 ] JWT 맛보기
1. Spring Initalizer로 Project 생성
- spring initializr 접속 https://start.spring.io/
- 셋팅 후 Generate 클릭, IDE로 오픈하기
- Intelij IDE
2. test용 API 생성하기
- controller package 추가
- CpdmController 생성
- Spring Boot Run
- PostMan으로 Test 해보기
- 401 Unauthorized가 뜰 것이다.
3. 401 Unauthorized 해결 - Security 설정하기
- config package 추가
- Security 설정을 위한 SecurityConfig 클래스 생성
- SpringBoot Run & PostMan으로 확인하기.
4. Datasource, JPA 설정하기
- application.properties을 application.yml로 변경하기 (yml이 가독성이 더 좋다.)
- application.yml 셋팅
5. Entity 생성하기
- 생성될 DB
- entity package 생성하고 User, Authority 클래스 생성하기
- User.java
import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.*; import javax.persistence.*; import java.util.Set; @Entity // 데이터베이스의 테이블과 1:1로 매칭되는 객체 @Table(name = "user") // 테이블 이름을 user로 지정한다. @Getter // 여기서부터는 lombok 어노테이션, 자동으로 생성해준다. (실무에서는 사용에 주의해야 함) @Setter @Builder @AllArgsConstructor @NoArgsConstructor public class User { @JsonIgnore @Id // PK @Column(name = "user_id") @GeneratedValue(strategy = GenerationType.IDENTITY) // 자동으로 증가 private Long userId; @Column(name = "username", length = 50, unique = true) private String username; @JsonIgnore @Column(name = "password", length = 100) private String password; @Column(name = "nickname", length = 50) private String nickname; @JsonIgnore @Column(name = "activated") private boolean activated; @ManyToMany // 다대다 관계 @JoinTable( // 일대다, 다대일 관계의 조인테이블로 정의 name = "user_authority", joinColumns = {@JoinColumn(name = "user_id", referencedColumnName = "user_id")}, inverseJoinColumns = {@JoinColumn(name = "authority_name", referencedColumnName = "authority_name")}) private Set<Authority> authorities; }
- Authority.java
import lombok.*; import javax.persistence.*; @Entity @Table(name = "authority") @Getter @Setter @Builder @AllArgsConstructor @NoArgsConstructor public class Authority { @Id // pk @Column(name = "authority_name", length = 50) private String authorityName; }
- User.java
- SpringBoot가 실행될 때 자동으로 Data를 넣어줄 수 있도록 data.sql을 만든다.
- data.sql
더보기INSERT INTO USER (USER_ID, USERNAME, PASSWORD, NICKNAME, ACTIVATED) VALUES (1, 'admin', '$2a$08$lDnHPz7eUkSi6ao14Twuau08mzhWrL4kyZGGU5xfiGALO/Vxd5DOi', 'admin', 1);
INSERT INTO AUTHORITY (AUTHORITY_NAME) values ('ROLE_USER');
INSERT INTO AUTHORITY (AUTHORITY_NAME) values ('ROLE_ADMIN');
INSERT INTO USER_AUTHORITY (USER_ID, AUTHORITY_NAME) values (1, 'ROLE_USER');
INSERT INTO USER_AUTHORITY (USER_ID, AUTHORITY_NAME) values (1, 'ROLE_ADMIN');- Spring Boot 2.5 버전부터는 data.sql 이 Hibernate 가 초기화되기 전에 실행된다.
따라서 Hibernate 초기화를 통해 생성된 스키마에 데이터를 입력하기 위해 data.sql 을 실행하려면
application.properties(yml)에 spring.jpa.defer-datasource-initialization = true 를 추가해야한다.
- Spring Boot 2.5 버전부터는 data.sql 이 Hibernate 가 초기화되기 전에 실행된다.
6. H2 Console 결과 확인
- H2 Console에 접근하기 위해 Security 설정하기
(h2-console 하위 모든 요청, favicon관련 요청은 Spring Security 로직을 수행하지 않도록 한다.) - SecurityConfig.java에서 하단을 추가해준다.
@Override public void configure(WebSecurity web) throws Exception { web .ignoring() //h2-console 하위 모든 요청, favicon관련 요청은 Spring Security 로직을 수행하지 않도록 한다. .antMatchers( "/h2-console/**" ,"/favicon.ico" ); }
- Spring Boot Run을 하면 테이블이 생성되는 것을 확인할 수 있다.
- http://localhost:8080/h2-console에 접속하여 실제 DB 확인하기.
- Connect를 눌려 접속하게 되면, DB가 정상적으로 생성되었음을 확인할 수 있다.
Dev_cpdm
choppadontbiteme.tistory.com
반응형
'Dev' 카테고리의 다른 글
[ Network ] OSI 7 Layer - Physical Layer (1) (0) | 2022.05.17 |
---|---|
[ JWT ] JWT 사용하기 - 2 (0) | 2022.04.18 |
[ JWT ] JWT란 무엇일까? (0) | 2022.01.29 |
[Error] Java Dangling meta character '+' near index 0 (0) | 2021.09.14 |
[ Vue3 ] Vue3 바뀐 점 정리 (0) | 2021.09.10 |