最初の刺し傷を助けるために必要なすべての情報を取得することはおそらくないでしょうが、私はできる限り最善を尽くし、これを編集していきます。
Spring-Security-Coreプラグインを使用したGrails1.3.7アプリケーションがあります。私はセッションタイムアウトとajaxリクエストを処理するコードに取り組んでいます。LoginControllerには、次のものがあります。
def authAjax = {
session.SPRING_SECURITY_SAVED_REQUEST_KEY = null
response.sendError HttpServletResponse.SC_UNAUTHORIZED
}
グローバルJavaScriptファイルには、次のものがあります。
$.ajaxSetup({
error: function(xhr, status, err) {
if (xhr.status == 401) {
$('#login-dialog').dialog({ // show ajax login });
}
}
});
これをローカルで実行すると、すべてが期待どおりに機能します。セッションがタイムアウトすると、FireBugコンソールに401が表示され、[ログイン]ダイアログが表示されます。これをステージングサーバーにデプロイすると、302を取得するだけで、authAjaxにアクセスすることはありません。そのため、401を取得することはありません。
ローカル開発とステージングの主な違いは、mod_proxyとapache httpdを使用して、Tomcatとの間でリクエストをプロキシしていることです。私の仮定は、これが私が401ではなく302を取得している理由ですが、100%確実ではありません。
私の質問
- mod_proxyが302を引き起こしていますか
- これを解決して、ローカルと同じように機能するようにするにはどうすればよいですか。ただし、mod_proxyを使用します。
アップデート:
最近のコメントによると、ローカルで、私が401を入手したとき、私はこれを見ています:
POST https://localhost:8080/admin/bookProject/edit 302 Moved Temporarily
GET http://localhost:8080/login/authAjax 401 Unauthorized
そして、authAjaxメソッドからのデバッグが表示されています
私が取得しているステージングサーバーでは、次のようになります。
POST https://server.com/admin/bookProject/edit 302 Moved Temporarily
また、authAjaxからのデバッグが表示されないため、そこに到達することすらできません。