Grails Ajax登录

时间:2011-07-24 14:39:10

标签: ajax grails spring-security

我想使用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)。也许我做错了什么: - )

我的基本问题是:

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

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

看起来你正确实现了它,也许还有一些小错误,比如拼写错误。

顺便说一句:

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

  2. 默认使用j_username& j_password。您可以使用ajax=true参数,而不是X-Request-With标题

  3. 默认情况下
  4. /j_spring_security_check

  5. 您可以在GrailsUserDetailsService GormUserDetailsService(或扩展userDetailsService)和setup it as a spring bean,名称为resources.xml >

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

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

    也许会有所帮助

答案 1 :(得分:2)

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

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

  1. 在我的Config.groovy
  2. 中添加了grails.plugins.springsecurity.successHandler.targetUrlParameter = 'ajaxUrl'
  3. 在我的AJAX登录表单中添加了<input type="hidden" name="ajaxUrl" value="/login/ajaxSuccess" />
  4. 不确定为什么会修复,但它似乎对我有用。

    只需为遇到困难的用户发布此解决方案并获取解决方案。