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

如何使用Spring Boot自动重定向到https

薛俊美
2023-03-14

如何轻松配置嵌入式tomcat服务器,将所有http流量重定向到https?我在弹性负载平衡器后面的ec2实例上运行Spring Boot。我已经配置了ELB来为我处理ssl(这太棒了),它将X-FORWARDED-PROTO头设置为“https”。我想检测什么时候没有设置,并重定向用户,迫使他们使用https,如果他们还没有设置的话。

到目前为止,我已经尝试将以下内容添加到我的application.properties文件中,但没有成功:

server.tomcat.protocol-header=x-forwarded-proto
security.require-ssl=true

共有3个答案

松钊
2023-03-14

您将需要一个密钥库文件和几个配置类。

下面的链接详细说明。

嵌入式tomcat上的Https

高夜洛
2023-03-14

配置属性的安全性。当基本身份验证被禁用时(至少在旧版本的Spring Boot上),require ssl不起作用。因此,您可能需要使用类似以下代码手动保护所有请求:

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Inject private SecurityProperties securityProperties;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        if (securityProperties.isRequireSsl()) http.requiresChannel().anyRequest().requiresSecure();
    }
}

你可以在这里查看我的完整答案:Spring Boot将HTTP重定向到HTTPS

钱黎明
2023-03-14

我的回答有点晚,但我最近才遇到这个问题,想发布一个对我有用的解决方案。

起初,我认为设置tomcat使用X-Forwarded头文件就足够了,但是Tomcat中通常应该处理这种情况的远程IPValve对我不起作用。

我的解决方案是添加一个EmBeddedServletContainerCustomizer和添加一个ConnectorCustomizer:(请注意,我在这里使用Tomcat 8)

@Component
public class TomcatContainerCustomizer implements EmbeddedServletContainerCustomizer {

    private static final Logger LOGGER = LoggerFactory.getLogger(TomcatContainerCustomizer.class);

    @Override
    public void customize(final ConfigurableEmbeddedServletContainer container) {
        if (container instanceof TomcatEmbeddedServletContainerFactory) {
            final TomcatEmbeddedServletContainerFactory tomcat = (TomcatEmbeddedServletContainerFactory) container;
            tomcat.addConnectorCustomizers(connector -> { 
                connector.setScheme("https");
                connector.setProxyPort(443);
            });
            LOGGER.info("Enabled secure scheme (https).");
        } else {
            LOGGER.warn("Could not change protocol scheme because Tomcat is not used as servlet container.");
        }
    }
}

重要的是,不仅要将方案设置为https,还要设置ProxyPort,如果没有ProxyPort,Spring Boot的所有内部重定向都会路由到端口80。

 类似资料:
  • 问题内容: 如何将* .appspot.com域重定向到自定义域。我想要的是这样重定向域: 注意:我正在使用go and gorilla mux。 问题答案: 您可以按照此处所述的方法进行组合,以重用代码。 在您的情况下,组合器将如下所示(根据您的口味和要求进行调整): 您可以使用以下方法包装处理程序:

  • 下午好,我正在使用spring boot,并且已经实现了http安全模式(https ),但是我需要知道如何将http请求重定向到https,以及是否有必要指定一个特定的安全端口,比如443,或者我可以使用任何端口。目前我使用端口8080 8443 我的班级 主要类别 请求类 响应类别 控制器类 应用属性 pom xml 我的项目结构 科胜 连接HTTP 更新 使用以下适用于我的spring版本的

  • 问题内容: 我一直在尝试通过正在处理的node.js项目来设置HTTPS。对于该示例,我基本上遵循了node.js文档: 现在,当我做 我懂了 如预期的那样。但是如果我这样做 我懂了 回想起来,这样做似乎很明显,但是与此同时,最终访问我项目的人不会键入 https :// yadayada,我希望从点击起就将所有流量都设为https网站。 我如何获得节点(以及Express,因为我正在使用的框架)

  • 我有和这个问题一样的问题,但不是在EC2环境中,只是简单地从命令行启动我的spring boot应用程序。我按照下面这个例子中的代码,成功地让我的应用程序在HTTPS上运行: 现在我可以在。 我希望会重定向到https。现在Chrome只是显示:“未收到数据”,这对用户不太友好。

  • 我需要执行以下操作:我当前的地址如下所示:https://www.domain.com 我想用htaccess:www.domain重定向。通信https://www.domain.com和http://domain.com到https://www.domain.com 我在这里尝试了一些建议,但最终还是没完没了的循环。我试过: 任何帮助都将不胜感激。 更新:我想我已经做到了以下几点: 这样做对吗

  • 问题内容: 从上一页收集到数据后,我想向客户显示另一页。但是我在服务器端重定向新URL时遇到麻烦。这是我的逻辑: 将带有POST操作的用户输入提交给服务器; 服务器运行函数saveChoice()将用户输入保存到数据库中; 保存用户输入后,服务器将新的URL发送给客户端。 当客户端获取新URL时,服务器读取数据库并取出保存的数据 我坚持执行第3步(这里是流程示例): 这是模板: 我可以知道如何重定