0

ここでは、完全にリモート ベースの 1 つのアプリケーションを作成しています。

すべての js と css がロードされるのは 1 回だけです。したがって、セッションの有効期限が切れた場合の解決策が必要です。

ajaxリクエストがコントローラーに来ると、最初に認証され、セッションの有効期限が切れた場合はセッションが認証され、ログインページにリダイレクトして再ログインしたいという意味です。

[編集 - @ブラッド]

あなたの要件を明確にしてみましょう..

1) Ajax 経由でサーバーにリクエストを行う

2) サーバーが認証されていない HTTP 401 で応答する

3) Ajax は 401 ステータスを認識し、ログイン ページにリダイレクトします。

4) ログイン成功、

5) その後、古いリクエストが実行されました。ステップ 1 要求が実行されることを意味します。

6)しかし、そのステップ1のリクエストを実行したくないが、ホームページを毎回実行したい.

4

2 に答える 2

2

1 つの方法は、クライアント側の AJAX コードでHTTP 401 応答コードをチェックすることです。これは、ユーザー セッションがタイムアウトになり、ユーザーがログインしていないことを意味します。

JQuery を使用して...

$.ajax({
    type: "post", url: "/SomeController/SomeAction",
    success: function (data, text) {
        //...
    },
    error: function (request, status, error) {
        // look for status of 401 and redirect to login
    }
});

もちろん、Web アプリが適切なステータス コードを返していることを確認する必要があります。このテーマに関するこの記事は、示唆に富むものであることがわかりました。

同様の質問に関するいくつかの良い情報もあります

[編集]

OK、ステップ 3 の更新された質問から、これは ajax リクエストで発生しています。ajax 処理コードが 401 応答を受け取り、それを表示しないことを決定できるため、ユーザーにはログイン ページが表示されないことが予想されます。次に、ユーザーのブラウザを選択したログイン URL にリダイレクトできます。この場合、ホームページにリダイレクトするか、追加の URL パラメーターを受け入れるようにログイン ページを構成して、ユーザーがログインした後にどこに移動するかを指定します。

于 2012-05-25T08:34:25.950 に答える
2

リクエストが毎回アクションに来る前に、フィルターインターセプターを使用できます。

これを行うより良い方法は、grails で利用可能な apache-shiro 認証プラグインを使用することです。

これを参照してください:GrailsのApache Shiro統合

これをアプリケーションにインストールして構成します。シンプルで、ほとんどの認証要件を処理します。

于 2012-05-25T07:59:13.190 に答える