정구리의 우주정복
[Spring] multi module 프로젝트 간 의존성 주입 + jwt token 파싱 본문
반응형
api 서버들에서 token 파싱하는걸 매번 만들 수는 없어서 toygry-common 모듈을 만들었다 !
여기에다가 token 파싱하는거를 만들어 놓고 다른 api 서버들에서 가져다 쓰면 여러번 만들지 않아도 될것이라는 멋진 생각
구조는 이런식으로 잡아봤다
constants에는 아직 넣을게 없어서 안넣음 ~
우선 KeycloakToken.java
public record KeycloakToken(String name, String userId, String email) {
}
이게 다임 .. record 처음 써보는데 어째서 이리도 편리한것 ..?? lombok 이 필요없넹
나중에 더 많이 써봐야겠다
TokenUtils.java
token (String) 의 payload 부분을 가져온다 -> 해당 부분 Base64로 Decoding -> Json 형태의 String 을 Map<String, Object> 형태로 변경 -> KeycloakToken 객체로 생성해주기
이런식으로 진행된다
@Slf4j
@NoArgsConstructor
public class TokenUtils {
public KeycloakToken tokenParser(String token) {
String tokenPayload = token.split("\\.")[1];
Base64.Decoder decoder = Base64.getDecoder();
String payload = new String(decoder.decode(tokenPayload));
JsonParser jsonParser = new BasicJsonParser();
Map<String, Object> tokenMap = jsonParser.parseMap(payload);
return new KeycloakToken(
tokenMap.get("name").toString(),
tokenMap.get("preferred_username").toString(),
tokenMap.get("email").toString());
}
}
이후 api 1번 서버에
build.gradle 에
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation project(":toygry-common")
}
implementation project(":모듈명") 을 써주면 모듈사이에 의존성 주입이 가능하다
컨트롤러는 이렇게 만들어주겠음 !
private final TestService testService;
@GetMapping("/token")
public KeycloakToken getToken(@RequestHeader("Authorization") String token) {
return testService.getToken(token);
}
서비스는 이렇게 !!
import com.example.toygry.utils.KeycloakToken;
import com.example.toygry.utils.TokenUtils;
import org.springframework.stereotype.Service;
@Service
public class TestService {
public KeycloakToken getToken(String token) {
TokenUtils tokenUtils = new TokenUtils();
return tokenUtils.tokenParser(token);
}
}
toygry-common 에서 만든 TokenUtils 를 잘 가져와서 사용중인걸 볼 수 있다 .. 빅왕 편리 ..
결과를 확인해보면 이렇게 token 의 내용을 파싱해서 확인 가능한 것을 볼 수 있다 ! 굿 !
이거로 Role 정보, User 정보 등을 가져와서 사용하면 좋을 듯 하다 !!
반응형
'JAVA > PROJECT' 카테고리의 다른 글
[Spring] @Builder 파헤치기 (2) | 2024.05.29 |
---|---|
[Git/Spring] git ignore 추가하기 (1) | 2024.05.28 |
[Spring] spring cloud gateway global filter (2) | 2024.05.20 |
[Spring] intellij 멀티모듈 만들기 + 의존성 추가 (1) | 2024.05.15 |
[Spring] Spring Cloud Gateway 로 API Gateway 만들기 (with Keycloak) gateway webflux spring security 설정 (0) | 2024.05.14 |
Comments