Spring Security 不会将 HTTP 重定向到 HTTPS

Posted

技术标签:

【中文标题】Spring Security 不会将 HTTP 重定向到 HTTPS【英文标题】:Spring Security does not redirect HTTP to HTTPS 【发布时间】:2018-01-12 12:35:07 【问题描述】:

我正在使用 Spring 4 和 Tomcat 7 实现一个 Web 应用程序。

我使用 SSL 证书在 Tomcat 上运行应用程序,它工作正常,但我想强制任何 HTTP 请求重定向到其 HTTPS 请求。

我已经搜索了 Spring Security 并添加了一些配置如下:

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true, proxyTargetClass = true)
public class CoreSecurityConfig extends WebSecurityConfigurerAdapter 

    @Override
    protected void configure(HttpSecurity http) throws Exception 
        http
            .antMatcher("/**")
            .requiresChannel()
                .anyRequest().requiresSecure();
        http
            .antMatcher("/**")
            .portMapper()
                .http(80).mapsTo(443);
    

但它似乎无法正常工作,并且 Spring Security 没有进行重定向。

这个配置有问题吗?

【问题讨论】:

您可以尝试添加http.headers().httpStrictTransportSecurity() 告诉客户端他们需要使用HTTPS。 @ngreen 我将重定向配置添加到 tomcat web.xml 并且它工作正常。无论如何,感谢您的帮助。 【参考方案1】:

感谢Steps to Configure SSL on Tomcat and Setup Auto Redirect from HTTP to HTTPS,通过将重定向配置添加到Tomcat 的web.xml,Tomcat 会进行重定向。

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

【讨论】:

嗨@BabakBehzadi,这个解决方案有效,谢谢!如果您了解 HttpSecurity 端口映射器为什么不起作用(根据您的问题),请分享,因为它对我也不起作用,我很想了解原因。

以上是关于Spring Security 不会将 HTTP 重定向到 HTTPS的主要内容,如果未能解决你的问题,请参考以下文章

Spring security Login 不会将我的表单(POST)传播到控制器

负载均衡器后面带有 Spring Security 的 Spring Boot:将 HTTP 重定向到 HTTPS

Spring Security 使用基于xml的http认证

Spring Security 不会抛出任何异常

使用 spring-session 和 spring-cloud-security 时,OAuth2ClientContext (spring-security-oauth2) 不会保留在 Redis

Spring Boot Security PreAuthenticated Scenario with Anonymous access