如何在 spring 云网关中将 HTTP 重定向到 HTTPS
How to redirect HTTP to HTTPS in spring cloud gateway
如何将 http
调用重定向到 spring-cloud-gateway
中的 https
。我已经按照 This Link 中的描述在我的网关项目中配置了 https。
现在 HTTPS url 工作正常,但另外我需要将所有 http
调用重定向到 https
。我试过了
但这对我不起作用,因为我没有使用默认 http
端口 8080,而且我的应用程序 运行 spring 安全。
以下代码展示了如何将 http
重定向到 https
,但我需要对 Netty
服务器进行相同的配置,因为 spring-cloud-gateway
仅支持 netty。
@Configuration
public class RedirectToHttpsConfig {
@Value("${server.port}")
private Integer httpsPort;
@Value("${server.http.port}")
private Integer httpPort;
/* ################ THIS WILL WORK FINE ################
################ IF YOU HAVE TOMCAT ################
################ AS EMBEDDED SERVER ################
*/
@Bean
public TomcatServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
protected void postProcessContext(Context context) {
SecurityConstraint securityConstraint = new SecurityConstraint();
securityConstraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection collection = new SecurityCollection();
collection.addPattern("*//*");
securityConstraint.addCollection(collection);
context.addConstraint(securityConstraint);
}
};
tomcat.addAdditionalTomcatConnectors(initiateHttpConnector());
return tomcat;
}
private Connector initiateHttpConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(httpPort);
connector.setSecure(false);
connector.setRedirectPort(httpsPort);
return connector;
}
/* ################ -------- ################ */
/* ################ HOW TO DO THE ABOVE Configuration
FOR NETTY SERVER ################ */
@Bean
public NettyReactiveWebServerFactory nettyReactiveWebServerFactory(){
NettyReactiveWebServerFactory netty = nettyReactiveWebServerFactory(){
NettyServerCustomizer nettyServerCustomizer = new NettyServerCustomizer() {
@Override
public void customize(HttpServerOptions.Builder builder) {
**// NOT ABLE TO FIGURE OUT HERE**
}
}
};
}
}
执行此操作的最佳方法是在您的网关前面放置一个 apache,并对其设置重写规则。 运行这种方式有很多好处。它还使您拥有最终用户可以点击的静态 url,如果您遇到问题或更改 apache 背后的基础技术,您可以将其指向新的 service/url 或其他任何内容。在 Apache 上执行此操作还允许您 运行 诸如 mod 之类的安全性。最终它可能只是一个直通(对你的 http->https 问题有一个重写规则)但这比在你的网关中用代码做它更好的架构。
如何将 http
调用重定向到 spring-cloud-gateway
中的 https
。我已经按照 This Link 中的描述在我的网关项目中配置了 https。
现在 HTTPS url 工作正常,但另外我需要将所有 http
调用重定向到 https
。我试过了
但这对我不起作用,因为我没有使用默认 http
端口 8080,而且我的应用程序 运行 spring 安全。
以下代码展示了如何将 http
重定向到 https
,但我需要对 Netty
服务器进行相同的配置,因为 spring-cloud-gateway
仅支持 netty。
@Configuration
public class RedirectToHttpsConfig {
@Value("${server.port}")
private Integer httpsPort;
@Value("${server.http.port}")
private Integer httpPort;
/* ################ THIS WILL WORK FINE ################
################ IF YOU HAVE TOMCAT ################
################ AS EMBEDDED SERVER ################
*/
@Bean
public TomcatServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
protected void postProcessContext(Context context) {
SecurityConstraint securityConstraint = new SecurityConstraint();
securityConstraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection collection = new SecurityCollection();
collection.addPattern("*//*");
securityConstraint.addCollection(collection);
context.addConstraint(securityConstraint);
}
};
tomcat.addAdditionalTomcatConnectors(initiateHttpConnector());
return tomcat;
}
private Connector initiateHttpConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(httpPort);
connector.setSecure(false);
connector.setRedirectPort(httpsPort);
return connector;
}
/* ################ -------- ################ */
/* ################ HOW TO DO THE ABOVE Configuration
FOR NETTY SERVER ################ */
@Bean
public NettyReactiveWebServerFactory nettyReactiveWebServerFactory(){
NettyReactiveWebServerFactory netty = nettyReactiveWebServerFactory(){
NettyServerCustomizer nettyServerCustomizer = new NettyServerCustomizer() {
@Override
public void customize(HttpServerOptions.Builder builder) {
**// NOT ABLE TO FIGURE OUT HERE**
}
}
};
}
}
执行此操作的最佳方法是在您的网关前面放置一个 apache,并对其设置重写规则。 运行这种方式有很多好处。它还使您拥有最终用户可以点击的静态 url,如果您遇到问题或更改 apache 背后的基础技术,您可以将其指向新的 service/url 或其他任何内容。在 Apache 上执行此操作还允许您 运行 诸如 mod 之类的安全性。最终它可能只是一个直通(对你的 http->https 问题有一个重写规则)但这比在你的网关中用代码做它更好的架构。