0

我有一个 grails-app 运行在:

http:localhost:8080/myapp

通过 ajax POST 在以下位置进行身份验证:

http:localhost:8080/myapp/j_spring_security_check

我正在尝试从在同一地址发布相同 ajax 请求的 Android 应用程序进行身份验证,身份验证似乎没问题,但服务器在登录后向 android 应用程序发送“重定向”,这是我的问题:如何避免在 android 应用程序上重定向以及如何在 android 应用程序中访问当前用户属性?

提前感谢您的任何提示!

4

1 回答 1

0

您可以使用以下命令检查请求是否为 ajaxrequest:

springSecurityService.isAjax(请求)

我决定编写自己的 ajaxSubmit 控制器操作,因为我也遇到了重定向问题。我这样做纯粹是为了证明概念,所以这个例子可能不是最整洁的。

def ajaxSubmit = {
    if(!springSecurityService.isAjax(request)) {
        redirect action: "authfail"
        return
    }

    def token = new UsernamePasswordAuthenticationToken(params.j_username, params.j_password)
    try {
        UserDetails userDetails = userDetailsService.loadUserByUsername(params.j_username)
        token.setDetails( userDetails )
    } catch (UsernameNotFoundException unfe) {
        request.getSession().setAttribute(WebAttributes.AUTHENTICATION_EXCEPTION, unfe)
        redirect action: "authfail"
        return
    }

    try {
        def authSession = authenticationManager.authenticate(token)
        SCH.getContext().setAuthentication(authSession)
        redirect action: "ajaxSuccess"
        return
    } catch (AuthenticationException ae) {
        request.getSession().setAttribute(WebAttributes.AUTHENTICATION_EXCEPTION, ae)
        redirect action: "authfail"
        return
    }
}
于 2012-09-03T09:13:51.590 回答