gpt4 book ai didi

grails - 如何有条件地跳过 Grails Spring Security 插件过滤器链中的 SecurityContextPersistenceFilter 过滤器

转载 作者:行者123 更新时间:2023-12-04 14:57:28 24 4
gpt4 key购买 nike

我有一个独特的场景,我试图在 Spring Security 插件的约束下解决(如果好奇,则为 1.2.7.3 版)。我创建了一个允许使用签名 URL 登录的自定义 SSO 插件。自定义插件效果很好,我根据文档添加了在 resources.groovy 中创建 bean 并添加到 BootStrap.groovy 中的过滤器链中。

SpringSecurityUtils.clientRegisterFilter('ssoFilter', SecurityFilterPosition.SECURITY_CONTEXT_FILTER.order + 10)

一旦用户登录,一切正常,并且添加到安全上下文的现有事件 session 对用户进行身份验证。

我有一个用例,其中一个已经通过身份验证的用户可能会在同一个浏览器(即同一个 session cookie)上与不同的用户在 SSO 请求中返回。我想让过滤器链注意到 URL 的查询字符串中的“sso=true”。

我现在看到的行为是 SSO 永远不会到达,因为原始用户已经通过安全上下文的身份验证。我无法在 SecurityContextPersistenceFilter 之前添加 SSO 过滤器因为这会导致 SSO 过滤器不断被命中而实际上没有渲染任何内容的问题。这遵循我看到的文档,其中说您不应该在安全上下文过滤器之前放置任何过滤器。

我曾考虑使用 springsecurity 为带有“sso=true”的 URL 创建一个特殊的过滤器链(我在未经身份验证的流程中通过向 RequestMatcher 添加自定义 AuthenticationEntryPointDelegatingAuthenticationEntryPoint 实现)来创建特殊的过滤器链。 filterChain.chainMap 配置说。但是,从文档和实验看来,只有路径被过滤了。

有没有办法确保只要在 URL 上看到“sso=true”,SSO 过滤器就会被命中,同时安全上下文仍然可用,或者 SecurityContextPersistenceFilter 可以将请求传递给 SSO 过滤器?

最佳答案

在我看来,您可以使用自定义 SecurityContextRepository .

Version 1.2.7.3 Spring Security Grails 插件似乎使用 Spring Security 3.0.7。如 Section 8.3.1 of the Spring Security reference 中所述,从 Spring Security 3.0 开始, SecurityContextPersistenceFilter 配置了 SecurityContextRepository bean,负责加载和保存 SecurityContext .默认情况下,这是 HttpSessionSecurityContextRepository 的一个实例.

您可以创建一个自定义类来扩展 HttpSessionSecurityContextRepository .如果请求包含 sso=true,自定义子类可以覆盖 loadContext(HttpRequestResponseHolder) 方法以删除“SPRING_SECURITY_CONTEXT” session 属性。查询参数。

可以查看HttpSessionSecurityContextRepository的实现在 GitHub 上的 Spring Security 3.0.7 中:
https://github.com/spring-projects/spring-security/blob/3.0.7.RELEASE/web/src/main/java/org/springframework/security/web/context/HttpSessionSecurityContextRepository.java

相关:How can I use Spring Security without sessions?

关于grails - 如何有条件地跳过 Grails Spring Security 插件过滤器链中的 SecurityContextPersistenceFilter 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30146563/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com