Uploaded image for project: 'Camel'
  1. Camel
  2. CAMEL-12855

camel-swagger-java not honoring the x-forwarded-[host,proto,prefix] headers.

Attach filesAttach ScreenshotVotersWatch issueWatchersCreate sub-taskLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments


    • Type: New Feature
    • Status: Resolved
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 2.22.1
    • Fix Version/s: 2.23.0
    • Component/s: camel-swagger
    • Labels:
    • Estimated Complexity:


      We have a camel spring boot application sitting behind an api gateway with a Swagger page for accessing the documentation for all of our services (created with Spring Boot and Zuul Proxy, Consul as service discovery). The Swagger gateway sends three headers to the camel application to retrieve the swagger docs, but camel-swagger-java is not honoring those headers, thus the attributes host, basePath and schemes remain the same as if the swagger documentation was being acessed directly.

      Example, when trying to get the swagger docs for our customer-service camel application:



      x-forwarded-prefix: /api-gateway/
      x-forwarded-host: api-gateway.dev-internal.io
      x-forwarded-proto: https,http


      The expected results should be

          "swagger": "2.0",
          "host": "api-gateway.dev-internal.io",
          "basePath": "/api-gateway/customer-service",
          "schemes": [ "https", "http" ]

      Current results:

          "swagger": "2.0",
          "host": "",
          "basePath": "/customer-service",
          "schemes": [ "http" ]


      we had a simple solution, which might not be the correct one. We changed the RestSwaggerSupport.java:


      public class RestSwaggerSupport {
          private static final String X_FORWARDED_PREFIX = "X-Forwarded-Prefix";     
          private static final String X_FORWARDED_HOST = "X-Forwarded-Host";
          public void renderResourceListing(RestApiResponseAdapter response, BeanConfig swaggerConfig, String contextId, String route, boolean json, boolean yaml, Exchange exchange, ClassResolver classResolver, RestConfiguration configuration, String prefix) throws Exception {
              Swagger swagger = reader.read(rests, route, swaggerConfig, contextId, exchange == null ? classResolver : exchange.getContext().getClassResolver());   
              setupXForwardedHeaders(swagger, exchange);
          private void setupXForwardedHeaders(Swagger swagger, Exchange exchange) {
              if (exchange.getIn().getHeaders().containsKey(X_FORWARDED_PREFIX)) {
                  String prefix = exchange.getIn().getHeader(X_FORWARDED_PREFIX, String.class);
                  prefix = prefix.replace("/", "");
                  if (prefix != null) {
                      String path = swagger.getBasePath();
                      path = "/" + prefix + path;
              if(exchange.getIn().getHeaders().containsKey(X_FORWARDED_HOST)) {
                  String host = exchange.getIn().getHeader(X_FORWARDED_HOST, String.class);
                  if(host != null && host.length() > 0) {


      If this is a valid approach, I will submit a PR. 






            • Assignee:
              zregvart Zoran Regvart
              thiagolocatelli Thiago Locatelli


              • Created:

                Issue deployment