在 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 路由也会重定向到登录
如何在 Laravel 4 中将一个路由重定向到 HTTPS,将所有其他路由重定向到 HTTP?
在 Tomcat 中将 HTTP 重定向到 HTTPS:PORT