정구리의 우주정복

[Spring] multi module 프로젝트 간 의존성 주입 + jwt token 파싱 본문

JAVA/PROJECT

[Spring] multi module 프로젝트 간 의존성 주입 + jwt token 파싱

Jungry_ 2024. 5. 20. 17:48
반응형

 

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 정보 등을 가져와서 사용하면 좋을 듯 하다 !!

반응형
Comments