When I hit URL through postman, [localhost:8090/api/v1] I get 200 but no response in body and when I check the logs of the service which was hit through gateway it shows nothing, which means it didn’t even came to the service.(So it should show 404 right?)
Also there is one more issue that I am not sure where am I doing wrong
when I use spring.cloud.gateway.routes[0].uri=localhost:6002 it gives 200 but
when I use spring.cloud.gateway.routes[0].uri=http://localhost:6002 it gives 404 in logs,
But point to be noted when I hit it through postman I get 200 for any above mentioned ways.
This is my application.properties
spring.cloud.gateway.routes[0].id=route1
spring.cloud.gateway.routes[0].uri=localhost:6002
spring.cloud.gateway.routes[0].predicates[0]=Path=/api/**
# spring.cloud.gateway.routes[0].filters[0]=StripPrefix=1
spring.cloud.gateway.routes[0].filters[0]=filter1
spring.cloud.gateway.routes[0].filters[1]=filter2
spring.cloud.gateway.routes[0].filters[2]=filter3
These are my filters
1}
@Override
public GatewayFilter apply(Config config) {
return (exchange, chain) -> {
// Get request details
String requestURL = exchange.getRequest().getURI().toString();
HttpHeaders headers = exchange.getRequest().getHeaders();
LOG.info("Pre-route Workflow Resolver: Request Method = {} and URL = {} ", exchange.getRequest().getMethod(), requestURL);
HttpHeaders modifiedHeaders = swapToken("sometoken", "sometoken", headers);
return chain.filter(exchange.mutate().request(exchange.getRequest().mutate().headers(httpHeaders -> httpHeaders.addAll(modifiedHeaders)).build()).build());
};
}
2} In my second filter I am directly returning the filter chain without doing anything
return chain.filter(ctx);
3} Third filter is nothing just postfilter
@Override
public GatewayFilter apply(Config config) {
return (exchange, chain) -> {
ServerHttpRequest request = exchange.getRequest();
return chain.filter(exchange).then(Mono.fromRunnable(() -> {
ServerHttpResponse response = exchange.getResponse();
LOG.info("Post WorkflowResolver Filter : Request Method = {} and URL = {} ",
request.getMethod(), request.getURI().toString());
LOG.info("Post WorkflowResolver Filter: Response status = {} ", response.getStatusCode());
resetAndAddHeader(response);
resetAndAddHeaders(response);
// Trigger the exchange completion to apply changes
exchange.getResponse().setComplete();
}));
};
}
private void resetAndAddHeader(ServerHttpResponse response) {
HttpHeaders headers = response.getHeaders();
String authorizationHeader = headers.getFirst(HEADER_AUTHORIZATION);
String nabAuthorizationHeader = headers.getFirst(NAB_HEADER_AUTHORIZATION);
LOG.debug("Before Post Filter CBX Token = {}", authorizationHeader);
LOG.debug("Before Post Filter Nab Token = {}", nabAuthorizationHeader);
if (authorizationHeader != null && nabAuthorizationHeader != null) {
headers.set(HEADER_AUTHORIZATION, nabAuthorizationHeader);
LOG.debug("After Post Filter CBX Token = {}", authorizationHeader);
LOG.debug("After Post Filter Nab Token = {}", nabAuthorizationHeader);
}
}
private void resetAndAddHeaders(ServerHttpResponse response) {
HttpHeaders headers = response.getHeaders();
Map<String, String> headersToAddBack = new HashMap<>();
// save and filter the headers
headers.entrySet().stream()
.filter(entry -> !entry.getKey().startsWith("X-"))
.forEach(entry -> headersToAddBack.put(entry.getKey(), String.join(",", entry.getValue())));
// save the response code
int responseStatusCode = response.getStatusCode().value();
// clear headers and add filtered headers back
headers.clear();
headersToAddBack.forEach(headers::set);
response.getStatusCode();
// set the original response code
response.setStatusCode(HttpStatusCode.valueOf(responseStatusCode));
}
Any help would be appriciated!
Let me know if you need anything else, I am new to gateway so dont have much idea where I could be going wrong.