api server login 구현 [1] token 발급

최준호·2022년 4월 28일
0

game

목록 보기
6/14
post-thumbnail

🔨Controller 추가

@RestController
@RequestMapping("/api/member")
@Slf4j
@RequiredArgsConstructor
public class MemberController {
    private final MemberService memberService;

    ...

    //로그인
    @PostMapping("/login")
    public ResponseEntity<String> login(@RequestBody RequestLogin requestLogin, HttpServletResponse response){
        ResponseEntity<String> responseEntity = memberService.login(requestLogin, response);
        return ResponseEntity.status(responseEntity.getStatusCode()).contentType(MediaType.APPLICATION_JSON).body(responseEntity.getBody());
    }
}

login 요청을 할 수 있도록 login을 추가해준다.

저번 코드에서 이제 실제 front 서버와 데이터를 주고 받게 하기 위해 /api/member 로 변경했다.

@Getter
@Setter
public class RequestLogin {
    private String userId;
    private String pw;
}

로그인시 데이터를 받을 Dto도 정의해주었다.

🔨Service 추가

public interface MemberService {

    ...

    ResponseEntity<String> login(RequestLogin requestLogin, HttpServletResponse response);
}
@Service
@RequiredArgsConstructor
@Slf4j
public class MemberServiceImpl implements MemberService{
    private final WebClientConfig webClient;

    ...

    @Override
    public ResponseEntity<String> login(RequestLogin requestLogin, HttpServletResponse response) {
        ResponseEntity<String> result = webClient.webClient().post()  //get 요청
                .uri("/login-service/game/login")    //요청 uri
                .body(Mono.just(requestLogin), RequestLogin.class)
                .retrieve()//결과 값 반환
                .toEntity(String.class)
                .block();

        //token parse
        String body = result.getBody();
        try {
            JwtToken token = new ObjectMapper().readValue(body, JwtToken.class);
            String accessToken = token.getAccess_token();
            String refreshToken = token.getRefresh_token();

            log.debug("accessToken = {}", accessToken);
            log.debug("refreshToken = {}", refreshToken);

            // access = header 전달
            // refresh = db 저장
        } catch (JsonProcessingException e) {
            log.error(e.getMessage());
        }

        return result;
    }
}

다음과 같이 서비스를 작성했고 반환되는 token 값들을 파싱해봤다.

@Getter
@Setter
public class JwtToken {
    private String access_token;
    private String refresh_token;
}

JwtToken 파싱을 위한 dto를 생성했다.

내가 생각한대로 잘 나온다!

profile
코딩을 깔끔하게 하고 싶어하는 초보 개발자 (편하게 글을 쓰기위해 반말체를 사용하고 있습니다! 양해 부탁드려요!) 현재 KakaoVX 근무중입니다!

0개의 댓글