にあるクライアント アプリケーションと対話する 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 呼び出しに干渉しません。これはかなり複雑だと思います。より良い解決策があれば教えてください。ありがとうございます。