2011-07-24 66 views
3

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

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

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

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

我的基本问题是:

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

感谢您的帮助!

回答

2

看起来像你正确实施它,也许有一些小错误,如错字。

BTW:

  1. implemented at filter内,处理实际控制人之前,你的要求。在你的情况下,它将是UsernamePasswordAuthenticationFilter(或RequestHolderAuthenticationFilter)。控制器仅用于呈现附加数据。至于AJAX身份验证,它使用/login/ajaxSuccess,呈现一个JSON响应

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

  3. /j_spring_security_check的默认

  4. 您可以实现自己的GrailsUserDetailsService(或扩展GormUserDetailsService),并setup it as a spring bean,名称为userDetailsService,在resources.xml

您还可以启用Spring Security的日志记录:

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

也许这将是有益的

+0

非常感谢您的回答。我现在尝试了几种方法,现在我明白了:-)。我没有加入参数,而不是我张贴它的Grails想不出分析JSON对象。我还有一个问题。我如何处理记住我的功能?我创建客户端的cookie与GWT但有可能让它通过Grails的创建,并将其存储在客户端上? – Gambo

2

我使用Grails的2.1.1跑进这个相同的问题。尝试了以上所有的事情,但仍然无法让我的AJAX登录名称调用ajaxSuccess方法。 但是,当它失败时,它调用authFail?ajax=true

更多挖后,这里是我做过什么:

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

不知道为什么它固定的,但它似乎对我有用。

刚刚发布此解决方案,谁卡住,来此票为解决方案的用户。