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

SpringBoot 2.0使用http和https,但是在https端口上将http重定向到https

赫连照
2023-03-14

我有一个使用http和https的SpringBoot 2.0应用程序。因此,在端口9080上,它服务于http协议,在端口9443上,它工作正常。我唯一想要的是重定向,如果用户输入例如:http://localhost:9443/e1

综上所述:

http://localhost:9080/e1

https://localhost:9443/e1

http://localhost:9443/e1

@SpringBootApplication
@EnableScheduling
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    /* HTTP(S) configuration */

    @Value("${http.port}")
    private int httpPort;

    @Bean
    public ServletWebServerFactory servletContainer() {
        TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
        tomcat.addAdditionalTomcatConnectors(createStandardConnector());
        return tomcat;
    }

    private Connector createStandardConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setPort(httpPort);
        return connector;
    }
}

我的应用程序属性是

server.port=9443
http.port=9080
server.ssl.enabled=true
server.ssl.key-store-type=PKCS12
server.ssl.key-store=classpath:keystore.p12
server.ssl.key-store-password=my_passowrd
server.ssl.key-alias=my_alias

也许有人对如何解决它有想法。谢谢,祝你有美好的一天:-)

共有3个答案

仲孙俊贤
2023-03-14

也许你可以试着把你的代码放在配置类中,我是这样做的,没有problem.the我使用的版本是2.3.4.RELEASE

@Configuration
public class TomcatConfig {
    @Value("${server.http.port}")
    private int httpPort;

    @Bean
    public ServletWebServerFactory servletContainer() {
        TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
        tomcat.addAdditionalTomcatConnectors(createStandardConnector()); // 添加http
        return tomcat;
    }

    private Connector createStandardConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setPort(httpPort);
        return connector;
    }
}

如果你仍然不能解决你的问题,我非常抱歉,我希望你能尽快解决这个问题

潘宝
2023-03-14

对于Springboo2. x,您可以使用以下内容。

    @Bean
public TomcatServletWebServerFactory tomcatFactory() {
    TomcatServletWebServerFactory tomcatFactory = new TomcatServletWebServerFactory() {
        @Override
        protected void postProcessContext(Context context) {
            SecurityConstraint securityConstraint = new SecurityConstraint();
            securityConstraint.setUserConstraint("CONFIDENTIAL");
            SecurityCollection collection = new SecurityCollection();
            collection.addPattern("/*");
            securityConstraint.addCollection(collection);
            context.addConstraint(securityConstraint);
        }
    };

    tomcatFactory.addAdditionalTomcatConnectors(redirectConnector());
    return tomcatFactory;
}

private Connector redirectConnector() {
    Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
    connector.setScheme("http");
    connector.setPort(80);
    connector.setSecure(false);
    connector.setRedirectPort(443);

    return connector;
}
周承天
2023-03-14

如果您使用嵌入式Tomcat,您可以修改返回的消息以包含重定向头。

例如,对于 Tomcat 9.0.x:

TLSClientHelloExtractor.USE_TLS_RESPONSE = ("HTTP/1.1 302 \r\n"
    + "Content-Type: text/plain;charset=UTF-8\r\n" + "Location: https://" + hostnamePort + "\r\n"
    + "Connection: close\r\n" + "\r\n" + "Bad Request\r\n"
    + "This combination of host and port requires TLS.\r\n"
    + "Please access this URL with HTTPS scheme.\r\n").getBytes(StandardCharsets.UTF_8);

请注意,这是静态值,只能重定向到一个 URL,除非您提供自己的安全通道实现。

 类似资料:
  • 我的一个域也有类似的问题。我为裸域和www域都安装了SSL证书。 现在,然而我想把裸体http://domain.com和https://domain.com都重定向到https://www.domain.com. 我在我的.htaccess中有这个规则,但当您使用https://domain.com,但是,当访问时http://domain.com,它重定向到http://www.domain.

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

  • 问题内容: __Apache 环境中心 尝试设置从http到https的自动重定向 我尝试将以下内容添加到我的httpd.conf中,但是没有用 有任何想法吗? 问题答案: 我实际上已经遵循了这个示例,并且对我有用:) 然后做:

  • 奇怪的问题。我使用FullCalendar向服务器上的endpoint发起ajax请求。终点是: 请注意,它是显式的HTTPS。但是,当我发起一个请求时(即当Fullcalendar发起一个请求时),我会得到一个301和一个到非HTTPSendpoint的重定向: 因为页面是通过HTTPS加载的,所以失败。 endpoint工作正常--当我将它加载到浏览器中时,我会得到预期的json输出(通过ht

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

  • 如何在spring WebFlux中配置HTTP->HTTPS重定向?我需要将所有请求重定向到(根据我的理解,任何请求都应该具有http状态响应,并更改HTTP->HTTPS)。在文档中没有找到任何关于它的信息。我找到了这个答案,但它与Tomcat有关。我有奈蒂。