在反向代理后面提供大张旗鼓的ui(基本上下文没有application.properties)

问题描述 投票:0回答:1

我有一个具有两个不同任务的软件:

  1. 让我们说一个应用程序任务
  2. REST 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/*");
    }

包含大张旗鼓的其余api任务配置如下(我认为目前不需要其余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 /

到达了完全不同的部署(例如,另一个Web ui)。结果,浏览器为/ api / swagger-ui.html显示http错误404并分别显示无法推断基本URL消息。

如果我通过项目资源下方的application.properties文件设置/ api /

,则问题是第一个任务(应用程序任务)将其基本上下文更改为/ api / application / ... 不需要...但是如果我愿意的话,招摇的ui会按预期工作。

所以我的问题是如何告诉整个招摇部署,它应该使用基本上下文路径/ api /

而不是/

谢谢您的支持,我希望问题是可以理解的:)

我有一个软件,它具有两个不同的任务:假设一个应用程序任务一个rest api任务使用Springboot初始化基本上下文{host} / application / ...上的应用程序任务,如下所示:...

swagger reverse-proxy swagger-ui
1个回答
0
投票

我自己找到了一个解决方案,并将其发布给可能存在相同问题的其他解决方案。我只是为[

© www.soinside.com 2019 - 2024. All rights reserved.