当前位置: 首页 > 知识库问答 >
问题:

如何在spring cloud gateway中将HTTP重定向到HTTPS

谈禄
2023-03-14

如何在spring cloud gateway中重定向http调用https。我已经在我的网关项目中配置了https,如本文所述。

现在HTTPS URL工作正常,但除此之外,我需要将所有http调用重定向到HTTPS。我试过这个

但这对我不起作用,因为我没有使用默认的http端口8080,而且我的应用程序正在spring security上运行。

下面的代码显示了如何将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**
                }
            }
        };
    }


}

共有1个答案

巫研
2023-03-14

最好的方法是在网关前面放一个apache,并在上面有一个重写规则。以这种方式运行它有很多好处。它还可以让你有一个最终用户可以访问的静态网址,如果你有问题或改变了apache背后的底层技术,你可以把它指向新的服务/网址或其他任何东西。在Apache上这样做还可以让你运行像mod安全这样的东西。最终它可能只是一个直通(为你的超文本传输协议提供一个重写规则-

 类似资料:
  • 问题内容: 我已经设置了TLS,它可以工作。我知道如何在nginx中从http重写为https,但是我不再使用nginx。我不知道如何在Go中正确执行此操作。 我将如何以一种好的方式做到这一点? 问题答案: 创建一个处理程序,以处理重定向到https的操作,例如: 然后重定向http流量:

  • 我们使用拉维5。要将http连接重定向到https,请使用中间件HttpsProtocol。 在我们的4个测试用例中,只有1个正确工作(最后一个重定向)。其他3种情况的中间件添加了url extra index.php。 http://www.aqualink.az/index.php ---

  • 我想问一下HTTP到HTTPS的重定向。正如我们所知,重定向是通过从web服务器端重定向来实现的。但是,当涉及到https重定向时,它可以通过两种方式完成,服务器端()和应用程序端()。我想知道: 以下哪种方法有效且性能更好。 考虑到同一服务器上的多个域和域,每种方法的优缺点 非常感谢。 参考: 将Laravel中的WWW重定向到非WWW-堆栈溢出

  • 我正在使用spring boot(1.2.3)和嵌入式Undertow。出于安全原因,我更愿意将任何http请求重定向到https,但我找不到这样做的示例。 下面是spring boot和Tomcat的一个示例:spring Boot-embeded Tomcat HTTP到HTTPS重定向

  • 我有一个正在运行的tomcat应用程序,它已经具有以下从HTTP到HTTPs的重定向规则: 是否可以添加一个例外/规则,将特定的http request(http://www . example . com)重定向到另一个特定的地址,并指定一个端口(比如https://www . example . com:8443/test),而不更改/删除上述连接器?

  • 问题内容: 我如何在Spring Webflux中配置http-> https重定向?我需要将所有请求重定向到(据我所知,任何请求都应具有http状态响应,并带有更改http-> https)。在文档中未找到有关此信息的任何信息。我找到了这个答案,但它与tomcat有关。我有净值。 问题答案: 我找到了方法,希望对您有所帮助: