在 jhipster 中将 http 重定向到 https

Posted

技术标签:

【中文标题】在 jhipster 中将 http 重定向到 https【英文标题】:redirect http to https in jhipster 【发布时间】:2018-12-21 05:35:46 【问题描述】:

我有一个使用 Spring Boot 的 jhipster (4.14.5) 单体应用程序,该应用程序在生产环境中使用 http v2 运行,并使用证书强制使用 ssl。应用程序服务器使用一个嵌入式 undertow 容器,该容器是使用自动构建器创建的(这是 jhipster 中的标准配置)。

不幸的是,它不会自动将生产服务器上在浏览器中使用 http 的用户转发到 https。我尝试了许多不同的可能解决方案来解决这个问题,包括

security:
  require-ssl: true

在 application-prod.yml 中

http.requiresChannel().anyRequest().requiresSecure()
and.portMapper().http(80).mapsTo(443)

在安全配置中

underTowContainer.addBuilderCustomizers(builder -> builder.addHttpListener(80, hostAddress));
        underTowContainer.addDeploymentInfoCustomizers(deploymentInfo -> 
            deploymentInfo.addSecurityConstraint(new SecurityConstraint()
                .addWebResourceCollection(new WebResourceCollection().addUrlPattern("/*"))
                .setTransportGuaranteeType(TransportGuaranteeType.CONFIDENTIAL)
                .setEmptyRoleSemantic(SecurityInfo.EmptyRoleSemantic.PERMIT))
                .setConfidentialPortManager(exchange -> 443);
        );

在 WebConfigurer 中

但是,到目前为止,还没有任何方法奏效。有什么我可以尝试的想法吗?

【问题讨论】:

【参考方案1】:

您是否使用诸如 nginx 之类的代理或负载均衡器之类的东西? 我建议将其用于 https 转发。

【讨论】:

不,我们目前不使用这样的东西。我们认为重定向是可能的,因为 jhipster 正在使用应该支持它的 undertow 组件 好的,我明白了。那么通常security.require-ssl=true.anyRequest().requiresSecure() 应该可以完成这项工作。 是否有任何其他代码可以防止这种情况或干扰重定向? 对我来说这个配置足以重定向到 https http .requiresChannel() .anyRequest().requiresSecure()。也许underTowContainer.addBuilderCustomizers 是多余的? @skrusche 您找到解决问题的方法了吗?如果是这样,请在此处发布。谢谢!【参考方案2】:

下面的 WebFlux 代码对我有用。

// Spring MVC
http.requiresChannel(channel -> channel
    .requestMatchers(r -> r.getHeader("X-Forwarded-Proto") != null).requiresSecure());
    
// WebFlux
http.redirectToHttps(redirect -> redirect
    .httpsRedirectWhen(e -> e.getRequest().getHeaders().containsKey("X-Forwarded-Proto")));

参考:https://www.jhipster.tech/security/

【讨论】:

以上是关于在 jhipster 中将 http 重定向到 https的主要内容,如果未能解决你的问题,请参考以下文章

jHipster - 即使从实体中删除权限,AngularJS 路由也会重定向到登录

在 Undertow 中将 HTTP 重定向到 HTTPS

如何在 Laravel 4 中将一个路由重定向到 HTTPS,将所有其他路由重定向到 HTTP?

在 Tomcat 中将 HTTP 重定向到 HTTPS:PORT

在 Codeigniter 中将 http 重定向到 https

在codeigniter中将站点url http重定向到https