首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在春云网关中将HTTP重定向到HTTPS

如何在春云网关中将HTTP重定向到HTTPS
EN

Stack Overflow用户
提问于 2018-07-03 08:42:03
回答 1查看 2.2K关注 0票数 5

如何将http调用重定向到spring-cloud-gateway中的https。如This Link所述,我在网关项目中配置了https。

现在HTTPS运行良好,但除此之外,我还需要将所有http调用重定向到https。我试过This

但是这并不适用于我,因为我没有使用默认的http端口8080,而且我的应用程序也运行在spring安全性上。

下面的代码演示了如何将http重定向到https,但是对于Netty服务器,我需要相同的配置,因为spring-cloud-gateway只支持netty。

代码语言:javascript
复制
@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**
                }
            }
        };
    }


}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-11 12:54:38

最好的方法是将apache放在网关前面,并对其进行重写。以这种方式运行它有许多优点。它还使您拥有一个最终用户可以访问的静态url,如果您有问题或更改apache背后的底层技术,您只需将其指向新的服务/url或其他任何东西。在Apache中这样做还允许您运行类似mod-security之类的程序。最终,它可能只是一个通过(为您的http->https问题重写规则),但这比在您的网关中使用代码更好的架构。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51150176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档