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

Posted

技术标签:

【中文标题】Spring Security:使用 requires-channel 属性强制 https 上的 api【英文标题】:Spring Security : Forcing apis on https using requires-channel attributes 【发布时间】:2015-10-19 10:19:12 【问题描述】:

我是 Spring 框架的新手,目前我正在开发 Spring + Maven 项目,在我的项目中,有很多 API,我只需要在 https 上运行/工作少数 API,它们不应该与 http 一起运行。

我对此做了一些发现,我发现我们可以通过使用 spring security requires-channel 属性非常轻松地做到这一点。

以下是 pom.xml 和 spring 安全文件中为 requires 通道制作的少数条目。

pom.xml 条目

<properties>
<spring.security.version>3.0.4.RELEASE</spring.security.version>
</properties>

<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>$spring.security.version</version>
</dependency>

<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>$spring.security.version</version>
</dependency>

在 spring-context.xml 文件中添加了与安全相关的条目

<security:http auto-config="true">
<security:intercept-url pattern="**/MyTesting"
    requires-channel="https" />

<security:authentication-manager>
</security:authentication-manager>

添加此条目后,我尝试点击http://localhost:8080/MyTesting,添加 requires-channel="https" 后它对我有效。我试图找到这个,但我无法获得任何有用的链接。请检查以上条目并纠正我所缺少的内容。任何帮助将不胜感激。

【问题讨论】:

你能把你的 spring-config.xml 文件也粘贴到这里吗 【参考方案1】:

您的模式不正确。您可以使用以下内容作为完全匹配:

<security:intercept-url pattern="/MyTesting"
    requires-channel="https" />

注意:Spring Security 在匹配 URL 时会忽略上下文根,因此您不需要考虑它。

如果你想匹配所有以 /MyTesting 结尾的 URL,那么你可以使用:

<security:intercept-url pattern="/**/MyTesting"
    requires-channel="https" />

【讨论】:

感谢您的回复,但它仍然对我不起作用。

以上是关于Spring Security:使用 requires-channel 属性强制 https 上的 api的主要内容,如果未能解决你的问题,请参考以下文章

Spring Security:SSL 加速器后面的 requires-channel="https"

Spring security:使用注释强制 https?

Spring Security 3.2 CSRF 禁用特定 URL

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

Spring Framework,Spring Security - 可以在没有 Spring Framework 的情况下使用 Spring Security?

Kubernetes中的Security Context, Resource requirement和Service Account