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

Posted

技术标签:

【中文标题】如何使用 Spring Security 仅接受 https 流量并拒绝所有 http 流量?【英文标题】:How to accept only https traffic and deny all http traffic using Spring Security? 【发布时间】:2013-10-02 16:08:37 【问题描述】:

在 java web 应用程序中,我的目标是只接受 https 请求并拒绝所有 http 请求。

在 spring 安全配置文件中,我在 intercept-url 标记中使用 requires-channel="https" 属性,但是如果用户请求 http,它会自动重定向到 https。

例子:

<intercept-url pattern="/**" access="permitAll" requires-channel="https" />

如果客户端尝试通过 http 访问应用程序,我该如何响应 404 Not Found,结果不会自动重定向到 https?

【问题讨论】:

这样对用户来说是不是很不方便? 【参考方案1】:

    您应该允许 HTTP,但立即重定向到相同的 URL,但使用 HTTPS。您可以在 Tomcat 或 nginx 等其他系统上集中执行此操作

    使用HTTP Strict Transport Security。这将告诉浏览器将来即使用户输入 HTTP 也直接转到 HTTPS 页面。

【讨论】:

我目前在示例中显示的内容已经自动重定向到 https。出于安全原因,我们不希望这样做,因为我们正在开发 OAUTH2 安全令牌服务平台,并且客户端应该确切地知道它正在请求。

以上是关于如何使用 Spring Security 仅接受 https 流量并拒绝所有 http 流量?的主要内容,如果未能解决你的问题,请参考以下文章

如何允许用户在 Spring Boot / Spring Security 中仅访问自己的数据?

如何仅在安全端点上应用 Spring Security 过滤器?

如何仅在 localhost 的 Spring Security 中禁用 csrf?

仅使用 Spring-Security(或)Spring 进行授权

带有 Spring Security 的 Spring REST 不接受凭据

如何仅针对特定 url 添加 Spring Security 验证码过滤器