認証に Sprint Security を使用する Grails アプリケーションを作成しています。非アクティブのために自動的にログオフされたユーザーにメッセージを表示する必要があります。
私のアプリケーションは、AJAX 要求とコントローラーへの直接要求の両方を使用します。AJAX リクエストの場合、Sprint Security はコード 401 の HTTP レスポンスを返すことに気付きました。デフォルトの URL マッピングを次のように再定義しました。
class UrlMappings {
static mappings = {
// ...
"401" (controller: 'errors', action: 'inactivityLogout')
}
}
inacticityLogout()
メソッドの本体は次のとおりです。
def inactivityLogout() {
log.debug("the user is logged out due to inactivity")
session.setAttribute('inactivityMessage', "You have been logged out due to inactivity.")
render(status: 401)
}
次に、属性が設定されているLoginController
かどうかを確認inactivityMessage
し、ログイン ページに対応するメッセージを表示します。
問題は、このソリューションが AJAX 呼び出しに対しては正常に機能することですが、アプリケーションの直接リンクをクリックするだけで別のページに移動しようとすると機能しません。2 番目のケースでは、ログが空であるため、メソッドinactivityLogout
は呼び出されません。
Firebug は、アプリケーションがコード 302 Moved Temporarily を返すことを示しているので、これが理由だと思います。しかし、その後、AJAX 呼び出しでも同じコードが返されることに気付きました。したがって、AJAX リクエストと非 AJAX リクエストの違いと、最後のリクエストが Grails URL マッピング エンジンによって処理されない理由がわかりません。
現在のソリューションの何が問題なのですか? この問題は、まったく別の方法で解決できますか?
ありがとう!