@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도 정의해주었다.
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를 생성했다.
내가 생각한대로 잘 나온다!