1

これと似たような質問がありますが、何が起こっているのかについての私の理解と、それを修正するために思いついたアイデアを説明しようと思いますうまくいけば、誰かが私を正しい軌道に乗せることができるでしょう.

シナリオ:私の webapp では、保護された領域で認証されたユーザーがタイムアウトします。次に、戻り値として json を期待して、(jquery を使用して) ajax 呼び出しを実行します。

構成: Web サーバーは tomcat で、web.xml の構成コードは次のとおりです。

<session-config>
  <session-timeout>30</session-timeout>
  <tracking-mode>COOKIE</tracking-mode>
</session-config>
...
<login-config>
  <auth-method>FORM</auth-method>
  <realm-name>My Authentication Area</realm-name>
  <form-login-config>
    <form-login-page>/login.jsp</form-login-page>
    <form-error-page>/error.jsp</form-error-page>
  </form-login-config>
</login-config>

私が理解していること:これは、30分間のアイドル状態の後にユーザーの認証を解除し、保護されたURLにアクセスしようとした場合、認証されていないユーザーをlogin.jspにリダイレクトするようにWebサーバーに指示します。

私が期待すること: サーバーは http エラーを返します。ユーザーは login.jsp にリダイレクトされます。

何が起こるか: サーバーは、応答コード 200 の ajax 呼び出しへの応答として login.jsp を返します。jquery は、html を json に解析できないため、parseerror をスローします。ユーザーはページに残され、何も起こらなかったようです。

私が理解していること:セッションがタイムアウトし、URLが保護された領域にあるため、Webサーバーはリクエストをサーブレットに転送しませんでした。サーブレット コードについて心配する必要はありません。

私がすること: jQuery.ajaxError グローバル イベントを使用して、すべての parseerrors をインターセプトします。これにより定型コードが削減されますが、すべてのケースをカバーできるわけではありません。また、何らかの理由で正規の json が壊れた構文で返された場合も受け入れられません。

$(document).ajaxError(function(event, jqxhr, settings, exception){
   if (settings.dataType === 'json' && exception.type === 'unexpected_token') {
      window.location.href = 'login.jsp';
   }
})

私がしたいこと: ajaxに応答するときにTomcatにhttpエラーを送信させ、クライアントでリダイレクトを処理させます。Tomcat が標準の URL リクエストと ajax リクエストの違いを生むことができるかどうかはわかりません。

この問題を解決するための最良のアプローチが何であるかわかりません。助けていただければ幸いです。

レン

4

2 に答える 2

1

これは私のウェブサーバーの標準機能であることがわかりました。

動作させる方法: 戻り値の型を確認し、それが html の場合は一意のログイン ページ タグを解析し、それに応じて続行します。login.html にメタ タグを追加しました。

<meta tag="login" />
于 2013-04-26T09:08:21.547 に答える
0

以下の手順に従ってください。それは私のために働いています。

1. ステップ 1 - 中央メソッドを作成します (マスター ページなど)。

 $(document).ajaxStart(function () {
        $.ajax({
            type: "POST",
            url: 'Home.aspx/CheckSessionTimeout',
            async: false,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (result) {
                if (parseInt(result.d) == 0) {
                    window.location.href = 'Login.aspx';
                }
            },
            Error: function (msg) {
                window.location.href = 'Login.aspx';
            }
        });

2. 手順 - 2 Home.aspx ページに Web メソッドを作成する

[WebMethod(EnableSession = true)]
    public static int CheckSessionTimeout()
    {
        if (HttpContext.Current.Session[LoginuserID] != null)
        {
            return 1;
        }
        else
        {
            return 0;
        }
    }

.master ページに追加された Webmethod は呼び出されません。.asmx ファイル、.ascx コントロール、または .aspx ページのいずれかに追加できます。

ここで、Ajax 形式で結果を取得するには、contentType や dataType などの AJAX 要求パラメーターが最も重要であることに注意してください。そうしないと、HTML 全体としてページが返されます。だから、それを言及することを忘れないでください.... !!!

さて、あなたは今働いていますか.... !!!

于 2015-07-15T11:36:15.863 に答える