我想使用spring security插件的ajax登录功能。
我完全不知道从loginController到我的GWT客户端获得JSON成功响应。
正如我从文档中所理解的那样,我需要将我的参数发布到url / j_spring_security_check,并且spring security会将我重定向到正确的操作。
如果我查看我的LoginController,我看不到任何实际的登录逻辑,对我来说有点神奇,其中所有的login / db都已完成。进一步的spring安全性总是重定向到action auth而不是使用AjaxAuth,即使我添加标题“X-Requested-With”发布。如果我把我的帖子发送到url / login / ajaxAuth我得到一个401,这是好的,因为它写在控制器中(即使我不知道为什么我们需要在这里返回401)。也许我做错了什么: - )
我的基本问题是:
感谢您的帮助!
答案 0 :(得分:2)
看起来你正确实现了它,也许还有一些小错误,比如拼写错误。
顺便说一句:
它是implemented at filter,它在实际控制器之前处理您的请求。在您的情况下,它将是UsernamePasswordAuthenticationFilter
(或RequestHolderAuthenticationFilter
)。控制器仅用于渲染其他数据。对于ajax身份验证,它使用/login/ajaxSuccess
,呈现JSON
响应
默认使用j_username
& j_password
。您可以使用ajax=true
参数,而不是X-Request-With
标题
/j_spring_security_check
您可以在GrailsUserDetailsService
userDetailsService
)和setup it as a spring bean,名称为resources.xml
> 您还可以通过以下方式打开Spring Security的日志记录:
log4j {
debug 'org.codehaus.groovy.grails.plugins.springsecurity',
'org.springframework.security'
}
也许会有所帮助
答案 1 :(得分:2)
我正在使用 Grails 2.1.1 并遇到同样的问题。尝试了以上所有的事情,但仍然无法通过我的AJAX登录来调用ajaxSuccess
方法。
但是当它失败时,它正在调用authFail?ajax=true
。
在深入挖掘之后,我就是这样做的:
grails.plugins.springsecurity.successHandler.targetUrlParameter = 'ajaxUrl'
<input type="hidden" name="ajaxUrl" value="/login/ajaxSuccess" />
不确定为什么会修复,但它似乎对我有用。
只需为遇到困难的用户发布此解决方案并获取解决方案。