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 に答える