Spring security:使用注释强制 https?

Posted

技术标签:

【中文标题】Spring security:使用注释强制 https?【英文标题】:Spring security: forcing https using annotations? 【发布时间】:2011-07-16 08:44:59 【问题描述】:

Spring 安全文档状态 (2.3.2):

如果您的应用程序同时支持 HTTP 和 HTTPS,你需要 只能访问特定的 URL 通过 HTTPS,那么这是直接的 支持使用 requires-channel 属性:

  <http>
    <intercept-url pattern="/secure/**" access="ROLE_USER" requires-channel="https"/>
    <intercept-url pattern="/**" access="ROLE_USER" requires-channel="any"/>
    ...
  </http>

但我在我的控制器上使用注释,而不是拦截 url 元素。

我可以通过注释有选择地强制实施 HTTPS 吗? 我可以对非安全页面强制使用 HTTP 吗?

【问题讨论】:

【参考方案1】:

从可用的文档看来,使用 only 注释可能无法强制执行通道安全性。

【讨论】:

似乎唯一的方法是通过intercept-url,这似乎破坏了注释(我已经注释了我的所有控制器并且到目前为止没有使用intercept-url,我猜我'将不得不回溯)。感谢您对此的确认,这很有帮助。【参考方案2】:

有很多例子展示了如何在 Spring Security 中使用注解

http://www.jroller.com/habuma/entry/method_level_security_in_spring

spring not enforcing method security annotations

我不明白您对非安全页面强制使用 HTTP 是什么意思。如果它是不安全的,那么它已经是 HTTP。

【讨论】:

我没有在这些链接中明确指出如何使用 only 注释强制用户使用 HTTPS。关于 HTTP,当从安全页面(例如帐户页面)转换回正常的非安全页面(作为将 HTTPS 流量保持在最低限度的一种方式)时,我正在考虑将用户降级到 HTTP。 @David:通过总 URL 将页面划分为安全和不安全是最简单的(这样更容易正确!),如果您想在返回不安全时从 HTTPS 降级到 HTTP,请注意你可以使用requires-channel="http" 来做到这一点。

以上是关于Spring security:使用注释强制 https?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Spring Security 的 @Secured 注释中是不是允许多个角色

Spring-Security:忽略服务器名称的别名并强制重新登录

Spring Security,注释@Secured 不起作用

使用 Spring Security 的 @PreAutorize 注释问题

如何使用 Spring boot keycloak 适配器 + spring security 强制更新 oAuth 令牌(访问令牌 + 刷新令牌)。?

Spring Security:使用 requires-channel 属性强制 https 上的 api