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,名称为userDetailsService
,resources.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