【问题标题】:Spring-boot redirect:/ to http instead of httpsSpring-boot 重定向:/ 到 http 而不是 https
【发布时间】:2021-12-12 18:52:54
【问题描述】:

当重定向到 spring-boot 控制器中的相对路径时,如下面的代码。当应用程序部署在 https 环境中时,它总是重定向到 http url。所以我在浏览器中收到混合来源内容阻止错误。

return "redirect:/redirectUrl";

应用部署在weblogic server中。

【问题讨论】:

    标签: java spring spring-boot http weblogic


    【解决方案1】:

    尝试将以下内容添加到您的 WEB-INF/web.xml 文件中...

    <web-app>
      <security-constraint>
        <web-resource-collection>
          <web-resource-name>SecureResources</web-resource-name>
          <url-pattern>/*</url-pattern>
        </web-resource-collection>
        <user-data-constraint>
          <transport-guarantee>CONFIDENTIAL</transport-guarantee>
        </user-data-constraint>
      </security-constraint>
    </web-app>
    

    这应该会导致任何 http 请求被重定向到 https。

    【讨论】:

      【解决方案2】:

      首先,打开 application.properties 文件并添加 server.http.port 属性以定义 HTTP 端口,并添加 server.port 属性以定义 HTTPS。

      注意server.http.port 是您定义的属性,在 SpringBoot 中不可用。

      在 application.properties 文件中:

          # (User-defined Property)
          # Port for HTTP and read by Spring Boot via @Value("${server.http.port:80}")
          server.http.port=8080
          
          # Port for HTTPS and read by Spring Boot via @Value("${server.port:443}")
          server:
        ssl:
          key-store: classpath:keystore.p12
          key-store-password: password
          key-store-type: pkcs12
          key-alias: springboot
          key-password: password
        port: 8443
      
      • server.port:服务器正在监听的端口。我们使用的是 8443 而不是默认的 8080 端口。
      • server.ssl.key-store:包含 SSL 证书的密钥库的路径。在我们的示例中,我们希望 Spring Boot 在类路径中查找它。
      • server.ssl.key-store-password:用于访问密钥库的密码。
      • server.ssl.key-store-type:密钥库的类型(JKS 或 PKCS12)。
      • server.ssl.key-alias:标识密钥库中密钥的别名。
      • server.ssl.key-password:用于访问密钥库中密钥的密码。

      接下来,创建一个HttpHttpsConfig 类并配置 Spring Boot 以同时使用 HTTP 和 HTTPS 协议。

      @Configuration
      public class HttpHttpsConfig {
      
          // (User-defined Property)
          @Value("${server.http.port:80}")
          private int httpPort;
      
          @Bean
          public ServletWebServerFactory servletContainer() {
              Connector connector = new Connector(TomcatServletWebServerFactory.DEFAULT_PROTOCOL);
              connector.setPort(this.httpPort);
      
              TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
              tomcat.addAdditionalTomcatConnectors(connector);
              return tomcat;
          }
      }
      

      如果这对您不起作用,您可以考虑不同策略和实施的参考。

      reference-1

      reference-2

      【讨论】:

        猜你喜欢
        • 2015-05-17
        • 2014-12-26
        • 2021-06-07
        • 2019-05-15
        • 2016-11-06
        • 2019-09-21
        • 2014-12-13
        • 2019-04-21
        • 2021-03-31
        相关资源
        最近更新 更多