Grails 3 和 Spring Security:当用户未登录时返回 401
Posted
技术标签:
【中文标题】Grails 3 和 Spring Security:当用户未登录时返回 401【英文标题】:Grails 3 and Spring Security: return 401 when user is not logged in 【发布时间】:2017-11-02 21:03:12 【问题描述】:在我的 Grails 3.2.9 网络应用程序中,我使用 Spring Security 插件来管理用户会话。这是依赖:
compile "org.grails.plugins:spring-security-core:3.1.1"
应用程序的自然(多年)演变带来了所有控制器中的基本所有操作,主要使用 @Secured
注释保护,以返回 JSON,类似于
return map as JSON // grails.converters.JSON
这意味着所有操作基本上都像 API 一样。
但由于它们是安全的,当用户未登录时,会执行重定向到/login/auth
(登录页面),这是您不会想到的。这就是为什么我正在寻找一种方法来返回 401 unauthorized
状态而不是让 Spring Security 执行重定向。
到目前为止,我已经查看了pessimistic lockdown,并且在网络上的搜索也将我带到了Spring Security Core REST plugin,但这两种方式似乎都不适合我的情况(最后对我来说,但也许我是遗漏了一些东西)。
所以欢迎任何建议,提前谢谢!
【问题讨论】:
【参考方案1】:我没有使用 Grails 的经验,但也许您正在寻找的东西可以通过在 Spring 安全配置中提供 org.springframework.security.web.AuthenticationEntryPoint
的不同实现来实现。默认情况下,Spring 使用 org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint
进行表单身份验证,它执行重定向到给定的登录页面。另一方面,org.springframework.security.web.authentication.HttpStatusEntryPoint
只是返回所需的状态。
在我们的项目中,入口点是通过 XML 配置以老式方式设置的:
<http pattern="/**" auto-config="false" entry-point-ref="yourAuthenticationEntryPoint">
【讨论】:
【参考方案2】:在resources.groovy
注册以下
authenticationEntryPoint(Http401AuthenticationEntryPoint, 'Bearer')
【讨论】:
这就像魔术一样! :D 我不可能得到这个解决方案。实际上,经过一些研究,我仍然有点模糊了解整个情况..您能否提供一个您认为最适合这种情况的参考?那真的很有帮助 请将答案标记为已接受。我没有参考。我查看了源代码的工作原理并做了适当的处理以上是关于Grails 3 和 Spring Security:当用户未登录时返回 401的主要内容,如果未能解决你的问题,请参考以下文章
Spring 3.0 - 无法找到 XML 模式命名空间的 Spring NamespaceHandler [http://www.springframework.org/schema/securit
Grails 3 和 Spring Security:当用户未登录时返回 401