Как заставить перенаправление RequestMapping соблюдать протокол вызывающего URL.(HTTPS / HTTP), - PullRequest
0 голосов
/ 20 июня 2019

Сценарий:

У меня есть перенаправление страниц swagger-ui, чтобы упростить доступ к ним.(Верблюд меня огорчает)
Когда я бегу локально, я использую HTTP.
Когда я бегу на тестовых серверах, я использую HTTPS.
В качестве альтернативы, я бы хорошонастройка верблюжьих потоков (xml) для изменения URL-адреса по умолчанию для страниц чванства.

Ожидается - (https перенаправлен на https) и (http перенаправлен на http):

http://localhost:8080/swagger-ui -> http://localhost:8080/webjars/swagger-ui/index.html?url=/api/swagger&validatorUrl= https://remote.com/swagger-ui -> https://remote.com/webjars/swagger-ui/index.html?url=/api/swagger&validatorUrl=

Actual - https & http перенаправлен на http:

http://localhost:8080/swagger-ui -> http://localhost:8080/webjars/swagger-ui/index.html?url=/api/swagger&validatorUrl= https://remote.com/swagger-ui -> http://remote.com/webjars/swagger-ui/index.html?url=/api/swagger&validatorUrl=

код:

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class SwaggerController {

    @RequestMapping("/swagger-ui")
    public String redirectToUi() {
        return "redirect:/webjars/swagger-ui/index.html?url=/api/swagger&validatorUrl=";
    }

    @RequestMapping("/swagger-ui.html")
    public String redirectToUi2() {
        return "redirect:/webjars/swagger-ui/index.html?url=/api/swagger&validatorUrl=";
    }
}
        <restConfiguration
                component="servlet"
                apiContextPath="swagger"
                contextPath="api"
                enableCORS="true"
                bindingMode="json">
            <dataFormatProperty key="prettyPrint" value="true"/>

            <!-- setup swagger api description -->
            <apiProperty key="base.path" value="api"/>
            <apiProperty key="api.version" value=".0.0.1"/>
            <apiProperty key="api.title" value="Some Forms"/>
            <apiProperty key="api.description" value="Description Here"/>
            <apiProperty key="api.contact.name" value="Contact here"/>
        </restConfiguration>

1 Ответ

0 голосов
/ 21 июня 2019

Это потому, что логическое имя представления (например, «redirect: / myapp / some / resource») перенаправит ваш вызов в текущий контекст сервлета, в вашем случае схема вашего контекста - HTTP.

Для этого случая необходимо реализовать разные контексты (один для HTTP и один для HTTPS), а затем вы можете прокси-вызов с помощью camel-servlet

Контекст 1 - http:

from("servlet:myapp?matchOnUriPrefix=true")
.to("http://newURL?bridgeEndpoint=true&throwExceptionOnFailure=false")

Контекст 2 - https:

from("servlet:myapp?matchOnUriPrefix=true")
.to("https://newURL?bridgeEndpoint=true&throwExceptionOnFailure=false")
...