在 Spring Security 中检查现有的 HttpSession

Posted

技术标签:

【中文标题】在 Spring Security 中检查现有的 HttpSession【英文标题】:Checking for existing HttpSession in Spring Security 【发布时间】:2012-05-08 14:18:29 【问题描述】:

是否可以通过检查 Spring Security 中现有的 HttpSession 来验证用户身份?我希望用户在一个 URL (http://example.com/auth) 上通过 CAS 进行身份验证,而不是其他 URL。例如,如果他们直接访问http://example.com/content,那么如果他们尚未登录 CAS,我想检查 HttpSession 并返回 401 Unauthorized 代码。如果他们已经进入 /auth 页面并登录,那么进入 /content 将返回内容。这样做的主要原因是避免 CAS 在身份验证期间导致的任何重定向。

我是 Spring Security 的新手,不知道我是否需要自定义 AuthenticationManager、AuthenticationEntryPoint、两者或其他东西。 AuthenticationManager 无法让我访问 HttpSession,而 AuthenticationEntryPoint 似乎不是实现此功能的正确位置。

有什么想法吗?

【问题讨论】:

【参考方案1】:

Spring Security 没有使用 HTTP 会话。 相反,您可以轻松调用此静态方法:

SecurityContextHolder.getContext().getAuthentication();

坦率地说,我认为您需要正确配置 Spring 安全性以避免检查身份验证并手动重定向到其他页面。

【讨论】:

是的,我通常会“正确”配置 Spring Security,但我有一种情况,当会话不存在时,我需要防止某些页面上的 CAS 重定向。 在哪里检查 getAuthentication() 方法?我会在 Spring Security 中使用某种过滤器吗?

以上是关于在 Spring Security 中检查现有的 HttpSession的主要内容,如果未能解决你的问题,请参考以下文章

将 spring-session 和 Redis 添加到现有的 Spring Boot Spring Security 配置中

覆盖现有的 Spring Security 身份验证

将现有的域类与 Spring Security 插件一起使用

将现有的域类与 Spring Security 插件一起使用

如何使用 Spring Security 检查 Java 代码中的“hasRole”?

为啥 Spring Security 使用默认的预认证检查?