MSA에서 redirect: 를 사용하게 될 경우 GateWay 기준 포트번호로 이동하는 것이 아닌 Front 서버를 기준으로 이동하게 된다.
이렇게 될 경우 게이트웨이를 통해 접속하는 것이 아닌 프론트 서버에 직접 접근하는 것이기 때문에 config 서버 등 다른 서버와 데이터를 주고 받을 수 없게 된다.
이를 해결하기 위해서
public String url(String url) {
List<ServiceInstance> instances = discoveryClient.getInstances("front-service");
try {
return String.format("%s%s", instances.get(0).getUri().toString(), url);
} catch (Exception e) {
return String.format("%s://%s:%d%s%s", request.getScheme(), request.getServerName(), request.getServerPort(), request.getContextPath(), url);
}
}
public String redirectUrl(String url) {
String _fromGateway = Objects.requireNonNullElse(request.getHeader("from-gateway"), "false");
String gatewayHost = Objects.requireNonNullElse(request.getHeader("gateway-host"), "");
boolean fromGateway = _fromGateway.equals("true");
return fromGateway ? request.getScheme() + "://" + gatewayHost + "/app" + url : request.getContextPath() + url;
}
게이트웨이를 통해야하는 경로는 해당 메서드를 통해 유입하게 했다.
EX)