본문 바로가기

STUDY/Spring

(79)
Spring Boot | 유효성 검사 직접 만들기! (Custom Constraint) 기본적으로 제공되는 어노테이션 말고, 직접 만들어볼 수 있다. 1. 제약(Constraint) @interface 작성 여기서 message, groups, payload는 기본적으로 꼭 작성해주어야 하는 값이다. @Size(max = 10, message = "...", groups = {...}) 이런식으로 받아지는 값이라고 생각하면 쉬움 @Target({METHOD, FIELD, TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE}) @Retention(RUNTIME) @Constraint(validatedBy = SmsBytesSizeValidator.class) @Documented public @interface SmsBytesSize { String message() def..
Spring Boot | spring-boot-starter-validation 의존성 추가 // Gradle implementation 'org.springframework.boot:spring-boot-starter-validation' // Maven org.springframework.boot spring-boot-starter-validation 자주 사용하는 어노테이션은 이정도가 있음.. @NotNull : 해당 값에 Null을 허용하지 않음 @NotBlank : Null을 허용하지 않으며 문자가 한 개 이상 포함되어야 함 (공백 제외) @NotEmpty : Null을 허용하지 않으며 공백 문자열을 허용하지 않음 @AssertTrue : true인지 확인 @Min : 값이 Min보다 작은지 확인 @Max : 값이 Max보다 큰지 확인 @Size : 값이 min과 max사이..
Spring Boot | Spring Security 한 유저에게 여러 Authority(ROLE) 부여하기 (UserDetails) UsernamePasswordAuthenticationToken에서 계속 에러가 발생해서 아예 싹 뜯어 고쳤다.. 현재 테이블 구조가 대충 이런식.. USERS테이블에 authority값을 두지 않고, authorities테이블을 따로 두어 참조하고 있음 CREATE TABLE `users` ( `id` mediumint(9) NOT NULL AUTO_INCREMENT, `username` varchar(255) DEFAULT NULL, `password` varchar(500) DEFAULT NULL, `enabled` tinyint(4) DEFAULT NULL PRIMARY KEY (`id`) ) CREATE TABLE `authorities` ( `user_id` mediumint(9) DEFAUL..
Spring Boot | Spring Security OAuth2 (7) 토큰과 함께 다른 정보 응답 /oauth/token URI에 토큰값을 요청할 때 다른 데이터를 추가해서 응답을 받고자 한다. 1. CustomJwtTokenConverter 작성 JwtAccessTokenConverter를 상속받아 token을 발급할 때 다른 정보들을 추가한다. /* /oauth/token URI response에 토큰 발급과 함께 다른 정보들을 보낼 수 있게 함 */ public class CustomJwtTokenConverter extends JwtAccessTokenConverter { @Override public OAuth2AccessToken enhance(OAuth2AccessToken accessToken, OAuth2Authentication authentication) { Map claims =..
Spring Boot | Spring Security OAuth2 (6) JWT KeyPair 키를 직접 발급해 키값으로 jwt를 해석 하는 방법으로 바꿔보기 1. KeyStore 생성 java에서 keytool이라는 KeyStore생성 툴을 제공하기 때문에 이것을 이용해 키를 발급한다. $ keytool -genkeypair -alias [키 별칭] -keyalg RSA -keypass [키 암호] -keystore [저장될 파일명] -storepass [파일의 암호] 그리고 public key값을 확인 $ keytool -list -rfc --keystore [저장 파일명] | openssl x509 -inform pem -pubkey ----BEGIN PUBLIC KEY----부분부터 ----END PUBLIC KEY----부분까지 복사 2. KeyStore등록 우선 Authenticatio..
Spring Boot | Spring Security OAuth2 (5) 서버 나누기 (Multi Module) ResourceServer와 AuthorizationServer를 따로 만들어보자...! 1. ResourceServer생성 따로 프로젝트를 생성해서 만들어도 되고 멀티 모듈로 만들어도 된다.. Spring Boot | 멀티 모듈 프로젝트 (Multi Module) OAuth2를 하다가.. 리소스 서버와 인증 서버를 따로 두기 위해... 고민하던 중 멀티 모듈이라는 것이 있다길래 해봤습니다.. 참고! Gradle 멀티 프로젝트 관리 안녕하세요! 이번 시간에는 아시는 분들 gaemi606.tistory.com 위의 글을 따라서 멀티 모듈 프로젝트를 생성 혹은 변환 할 수 있음! DBServer -> module-jdbc ResourceServer -> module-api AuthorizationServer..
Spring Boot | 멀티 모듈 프로젝트 (Multi Module) OAuth2를 하다가.. 리소스 서버와 인증 서버를 따로 두기 위해... 고민하던 중 멀티 모듈이라는 것이 있다길래 해봤습니다.. 참고! Gradle 멀티 프로젝트 관리 안녕하세요! 이번 시간에는 아시는 분들은 거의다 아시는(!?) Gradle을 이용한 멀티 프로젝트(모듈) 관리에 대해 소개하려고 합니다. 모든 코드는 Github에 있으니 참고하셔서 보시면 더 좋으실 것 jojoldu.tistory.com 1. 프로젝트 생성 스프링 이니셜라이저 혹은 다양한 방법으로 스프링 부트 프로젝트를 생성하면 된다. 나는 스프링 이니셜라이저를 이용했음! 그리고 1번에서 생성한 프로젝트가 루트 프로젝트가 된다. SpringBoot 2.4.2 Gradle IntelliJ (커뮤니티 버전) Java11 2. 모듈 생성 세..
Spring Boot | Spring Security OAuth2 (4) JWT TokenStore 이전까지는 짧은 문자열 토큰을 받았다면, 이제 JWT를 이용해 길고.. 정보가 담긴... 토큰을 받아보려 한다! JWT토큰으로 발급받으면 더 이상 데이터베이스에 토큰을 저장하지 않아도 된다...? 0. 의존성 추가 jwt를 사용하기 위해서는 spring-securiti-jwt를 추가해야 함 // JWT implementation group: 'org.springframework.security', name: 'spring-security-jwt', version: '1.1.1.RELEASE' 1. CustomUserDetailService만들기 그런데 그 전에..! User를 수정해준다 UserDetails를 상속받아 오버라이딩 해주기.. @Data @ToString public class User im..