1

にあるクライアント アプリケーションと対話する REST API を含む Web アプリケーションがあります/。ユーザー セッションがタイムアウトし、クライアント js アプリケーションが REST API に要求を行うと、その要求によってログイン イベントがトリガーされます。ユーザーがログインすると、ユーザーは REST API エンドポイントに移動し、JSON 応答が表示されます。ログイン ページを常に にリダイレクトするように配線したいと思います/

編集 1: openid プラグインと grails 2.0.4 で spring-security-core プラグインを使用しています。

編集2:私は解決策をうまく機能させることができましたが、それは少し粗雑で、もっと洗練された解決策があるかどうか知りたいです。

で簡単なフィルターを作成しましたgrails-app/conf/LoginRedirectFilters.groovy

class RedirectLoginFilters {
    def filters = {
        redirectAfterLogin (uri: '/api/*') {
            before = {
                if (session["LOGGING_IN"])
                    redirect uri: "/"
            }
            after = {
                if (session["LOGGING_IN"])
                    session["LOGGING_IN"] = false
            }
        }
    }
}

そして、私のauth関数内にOpenIdController.groovyセッションフラグを追加しましたLOGGING_IN:

def auth = {                                                                                     

    def config = SpringSecurityUtils.securityConfig                                              

    if (springSecurityService.isLoggedIn()) {                                                    
        redirect uri: config.successHandler.defaultTargetUrl                                     
        return                                                                                   
    }                                                                                            

    session["LOGGING_IN"] = true
    .
    .
    .

これは、API エンドポイントが呼び出されたときにフラグが true かどうかをチェックするだけで正しく機能していますLOGGING_IN。また、1 つのリクエストの後にフラグを強制終了するため、後続のクライアント API 呼び出しに干渉しません。これはかなり複雑だと思います。より良い解決策があれば教えてください。ありがとうございます。

4

2 に答える 2

0

私はあなたが達成したいことを正確に誤解していると思いますが、ログインが成功した後に常に'/'にリダイレクトしたい場合は、これらのプロパティをあなたのConfig.groovy:に設定してください。

grails.plugins.springsecurity.successHandler.alwaysUseDefault = true
grails.plugins.springsecurity.successHandler.defaultTargetUrl = "/"

これとは異なる動作が必要な場合は、質問を具体化する必要があります。

于 2012-08-20T09:18:33.363 に答える
0

フィルター内でも同じ「springSecurityService.isLoggedIn()」を使用できないのはなぜですか? それもうまくいくと確信しています。

于 2012-08-15T05:14:30.063 に答える