Grails Ajax 登录

Posted

技术标签:

【中文标题】Grails Ajax 登录【英文标题】:Grails Ajax Login 【发布时间】:2011-10-12 01:19:48 【问题描述】:

我想使用spring security插件的ajax登录功能。

我完全无法从 loginController 获取 JSON 成功响应到我的 GWT 客户端。

正如我从文档中了解到的,我需要将我的参数发布到 url /j_spring_security_check 并且 spring security 正在将我重定向到正确的操作。

如果我查看我的 LoginController,我看不到任何实际的登录逻辑,这对我来说有点神奇,所有登录/数据库的东西都完成了。即使我添加标题“X-Requested-With”来发布,进一步的 spring 安全性总是重定向到操作身份验证而不是使用 AjaxAuth。如果我在 url /login/ajaxAuth 上发帖,我会得到一个 401,这没关系,因为它写在控制器中(即使我不知道为什么我们需要在这里返回 401)。也许我做错了什么:-)

我的基本问题是:

在哪里可以找到登录逻辑? 我必须提供什么参数? 我必须使用哪个 URL? 如果我不想使用用户名而是使用电子邮件字段,我该怎么办?

感谢您的所有帮助!

【问题讨论】:

【参考方案1】:

看起来你已经正确实现了它,也许有一些小错误,比如错字。

顺便说一句:

    是implemented at filter,在实际控制者之前处理您的请求。在您的情况下,它将是UsernamePasswordAuthenticationFilter(或RequestHolderAuthenticationFilter)。控制器仅用于呈现附加数据。至于 ajax 身份验证,它使用/login/ajaxSuccess,呈现JSON 响应

    默认情况下它使用j_username & j_password。您可以使用ajax=true 参数,而不是X-Request-With 标头

    默认/j_spring_security_check

    您可以实现自己的GrailsUserDetailsService(或扩展GormUserDetailsService)和setup it as a spring bean,名称为userDetailsServiceresources.xml

您还可以通过以下方式打开 Spring Security 的日志记录:

log4j 
   debug 'org.codehaus.groovy.grails.plugins.springsecurity',
         'org.springframework.security'

也许会有所帮助

【讨论】:

非常感谢您的回答。我现在尝试了几种方法,现在我明白了:-)。我没有添加参数,而是发布了 Grails 无法解析的 JSON 对象。我还有一个问题。如何处理记住我的功能?我使用 gwt 在客户端创建了一个 cookie,但是否可以让它由 grails 创建并将其存储在客户端上?【参考方案2】:

我正在使用 Grails 2.1.1 并遇到了同样的问题。尝试了以上所有方法,但仍然无法让我的 AJAX 登录来调用 ajaxSuccess 方法。 然而,当它失败时,它正在调用authFail?ajax=true

在深入挖掘之后,这是我所做的:

    在我的 Config.groovy 中添加了 grails.plugins.springsecurity.successHandler.targetUrlParameter = 'ajaxUrl' 在我的 AJAX 登录表单中添加了 <input type="hidden" name="ajaxUrl" value="/login/ajaxSuccess" />

不知道为什么它会修复,但它似乎对我有用。

仅为遇到困难并来此票证寻求解决方案的用户发布此解决方案。

【讨论】:

以上是关于Grails Ajax 登录的主要内容,如果未能解决你的问题,请参考以下文章

Grails Spring Security - 会话超时后重新登录时重新加载会话变量

ajax请求在spring security中被拒绝,Grails

无法使用 grails 通过 CAS 单点登录登录

Grails 3 Spring Security 覆盖登录表单

如何设置永远记住我或登录grails?

使用 Grails 创建 Google 登录