Обеспечить интерфейс пользователя за обратным прокси (без application.properties для базового контекста) - PullRequest
0 голосов
/ 23 января 2020

У меня есть программное обеспечение, которое выполняет две разные задачи:

  1. Допустим, задача приложения
  2. Задача API остальных

Задача приложения на базовый контекст {host} / application /... инициализируется с помощью Springboot следующим образом:

    public static void main(String[] args) {
        new SpringApplicationBuilder(ApplicationStarter.class).properties(Properties.loadPortProperty()).run(args);
    }

    @Bean
    public ServletRegistrationBean endpoint() {
        return new ServletRegistrationBean(new ApplicationServlet(), "/application/*");
    }

Задача rest api, содержащая swagger, настраивается следующим образом (конечные точки остальных api я думаю, что в данный момент не требуется):

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>
@Controller
@RequestMapping("/api")
public class HomeController {

    @ApiIgnore
    @GetMapping(value = "")
    public void index(HttpServletResponse response) throws IOException {
        response.sendRedirect("/api/swagger-ui.html");
    }

}
@Configuration
@EnableSwagger2
public class SwaggerDocumentationConfig implements WebMvcConfigurer {

    @Bean
    public Docket api() {

        return new Docket(DocumentationType.SWAGGER_2)
                .useDefaultResponseMessages(false)
                .select()
                .apis(RequestHandlerSelectors.basePackage("test.package"))
                .paths(PathSelectors.any())
                .build();
    }

    @Override
    public void addResourceHandlers(final ResourceHandlerRegistry registry) {

        registry.addResourceHandler("/api/swagger-ui.html**")
                .addResourceLocations("classpath:/META-INF/resources/swagger-ui.html");
        registry.addResourceHandler("/api/webjars/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/");
    }

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {

        registry.addRedirectViewController("/api/v2/api-docs", "/v2/api-docs");
        registry.addRedirectViewController("/api/swagger-resources/configuration/security", "/swagger-resources/configuration/security");
        registry.addRedirectViewController("/api/swagger-resources/configuration/ui", "/swagger-resources/configuration/ui");
        registry.addRedirectViewController("/api/swagger-resources", "/swagger-resources");
    }

}

Так что эта конфигурация отлично работает на моей локальной машине. Проблема в том, что если эта конфигурация работает за обратным прокси-сервером, я не могу связаться с swagger-ui. html из-за перенаправления на swagger без / api / достигает совершенно другого развертывания (например, другого веб-интерфейса) ). В результате браузер показывает для / api / swagger-ui. html ошибку http 404 соответственно и Невозможно вывести базовый URL-адрес сообщение.

Если я установил / api / через файл application.properties под ресурсами проекта, проблема заключается в том, что первая задача (задача приложения) меняет свой базовый контекст на / api / application /..., который не нужен ... но если я сделаю это, пользовательский интерфейс работает так, как задумано.

Поэтому мой вопрос заключается в том, как сказать всему развертыванию Swagger, что он должен использовать базу контекстный путь / api / , а не / ?

Спасибо за вашу поддержку, и я надеюсь, что понятно, в чем проблема:)

1 Ответ

0 голосов
/ 11 февраля 2020

Я нашел решение сам и выложил бы его для других, у которых могла быть та же самая проблема. Я просто предоставляю свои собственные реализации конечных точек для

  • / api / swagger-resources / configuration / security
  • / api / swagger-resources / configuration / ui
  • / api / swagger-resources

и возврат вручную значений, требуемых для swagger-ui. html ... Учитывая, что эти значения JSON являются stati c, проблем не должно быть сделать эту работу.

...