Grails 3 和 Spring Security - 在过滤器中验证用户

Posted

技术标签:

【中文标题】Grails 3 和 Spring Security - 在过滤器中验证用户【英文标题】:Grails 3 and Spring Security - authenticate user in filter 【发布时间】:2017-08-28 12:58:45 【问题描述】:

我正在开发一个由 Spring Security 插件驱动的 Grails 3 Web 应用程序,它已经大量使用 @Secured 注释来根据单个登录用户的权限来保护控制器和操作。 登录当前通过通常的用户名/密码对进行管理。

现在出现了一个新要求,涉及自定义请求标头,具有一种“授权令牌”作为值:

此令牌标识一组用户(我们称之为团队) 如果此令牌被识别为有效,与 DB 匹配,则整个应用程序应表现为预定义用户(我们称其为 John团队 的一部分)已登录。从这个意义上说,它应该充当预身份验证。该用户将拥有自己的角色,因此应用程序会做出相应的响应,就好像 John 会使用自己的用户名/密码登录一样。 如果无法识别令牌,则必须返回 401 状态。 如果令牌没有通过,应用程序必须有它当前的行为,令牌管理应该被认为是可选的,必须完全不影响当前的实现。

我考虑定义一个自定义过滤器(我还查看了这个post,但是它有不同的要求),但我什至无法确定:

这项任务的可行性 过滤器是否是最好的方法(但我猜是因为拦截器触发得太晚了,我需要在 Spring Security 发挥作用之前评估一些额外的逻辑) 可能是扩展的最佳过滤器

欢迎提出任何建议!提前致谢

【问题讨论】:

你看过 JWT 和 spring-security-rest 吗? plugins.grails.org/plugin/grails/spring-security-rest 感谢@erichelgeson 的建议,但我觉得它不符合我的要求:当 team 令牌标头存在时,基本上不应该发生显式用户身份验证(没有用户名/密码),而应该自动生成 John 的用户会话。 【参考方案1】:

不是这方面的专家,但我会实现自定义 UserDetailsS​​ervice 并根据令牌条件设置权限。您也可以在 AuthenticationSuccessListener 中执行此操作。

【讨论】:

以上是关于Grails 3 和 Spring Security - 在过滤器中验证用户的主要内容,如果未能解决你的问题,请参考以下文章

Spring 3.0 - 无法找到 XML 模式命名空间的 Spring NamespaceHandler [http://www.springframework.org/schema/securit

使用带有令牌的 spring 安全插件的一个好习惯

Grails 3.0 和 Spring Security

Grails 3 和 Spring Security:当用户未登录时返回 401

Grails 3 Spring Security 覆盖登录表单

Grails 1.3.5 和 Spring Security Core