使用 Spring Security 配置 HTTP 页面和 HTTPS 页面

Posted

技术标签:

【中文标题】使用 Spring Security 配置 HTTP 页面和 HTTPS 页面【英文标题】:Configuring HTTP pages and HTTPS pages with Spring Security 【发布时间】:2015-04-10 20:58:23 【问题描述】:

我已经使用 Spring Security 成功设置了一个应用程序。当用户请求安全页面时,Spring 会自动将这些用户重定向到 HTTPS 页面。

<http auto-config="true" use-expressions="true" once-per-request="true" >
    <intercept-url pattern="/login" access="permitAll" requires-channel="https"/>
    <intercept-url pattern="/my-account" access="isAuthenticated()" requires-channel="https"/>

    <logout />
    <form-login login-page="/login" />
    <port-mappings>
        <port-mapping http="8080" https="8443"/>
        <port-mapping http="80" https="443"/>
    </port-mappings>
</http>

但是当用户导航时,接下来的其他没有敏感信息的页面仍然使用 HTTPS。我想只使用 HTTP 访问这些普通页面。

有什么聪明的方法可以做到这一点吗?我希望仅使用 HTTP 访问我未配置为 HTTPS 通道的所有其他页面。我尝试使用一些通配符但没有成功。

额外细节: HTTPS 使用更多的服务器 CPU。我在某些页面上有很多请求,我想避免这笔额外费用。

【问题讨论】:

为什么不对整个站点使用 HTTPS?见火羊 我读到它使用了更多的服务器 CPU。我在某些页面上有很多请求,我想避免这笔额外费用。 【参考方案1】:

将您的整个网站设为 HTTPS。这些天来,性能变化很小,您不会通过通过 HTTP 公开他们的会话 cookie 来欺骗您的用户。

https://istlsfastyet.com/

【讨论】:

【参考方案2】:

在 Spring-Security 中,你可以这样做 -

<http auto-config="true" use-expressions="true" once-per-request="true" >
<intercept-url pattern="/login" access="permitAll" requires-channel="https"/>
<intercept-url pattern="/my-account" access="isAuthenticated()" requires-channel="https"/>
<intercept-url pattern="/**" access="permitAll" requires-channel="http"/>

除了“/login”和“/my-account”之外的所有其他url都将通过http提供。

除此之外,您必须为 cookie 设置安全标志。 通过设置安全标志,浏览器将阻止通过未加密通道传输 cookie。 https://www.owasp.org/index.php/SecureFlag

【讨论】:

最后一行没有覆盖所有其他配置? 最后一行没有覆盖之前的intercept-url配置。 Spring Security 从上到下进行拦截 url 模式匹配,对于找到的第一个匹配,它应用配置的“requires-channel”。所以对于上面的行,所有的 url 模式(除了“/login”和“/my-account”),通道都是 HTTP。

以上是关于使用 Spring Security 配置 HTTP 页面和 HTTPS 页面的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Spring Security 仅接受 https 流量并拒绝所有 http 流量?

Spring Security 3.2 CSRF 禁用特定 URL

Spring Security - 更改 RedirectStrategy 的所有实例

如何在我的 Spring 4.0 RestFul Web 服务上实现 Spring Security?

angularjs,rest api,spring security,休眠任何应用程序

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