2016-05-08 9 views
0

セッションを設定するこのインターセプタ機能があります。 設定したセッションをAJAXで動作させる方法

if (request.getRequestURL().indexOf("profile") > 0) { 
    if (session.getAttribute("access").equals("sub-admin")) { 
     System.out.println("This is request to profile - admin"); 
    } else { 
     System.out.println("This is request to profile - user"); 
     response.sendRedirect(request.getContextPath() + "/error"); //ERROR HERE YOU ARE JUST A USER NOT AN ADMIN, I WILL REDIRECT YOU TO ERROR PAGE 
    } 
} 

は今、私は私のフロントエンドでjQueryとAJAXを使用しています。

私は単なるユーザで、localhost:8080/sample/profileにアクセスしても問題ありません。エラーページにリダイレクトされました。

しかし、ホームページのメニューでアクセスしてプロファイルをクリックすると、機能しません。

私はAJAXを使用しており、パスは変更されないため、表示のみであると思います。

$.ajax({ 
    url: ROOT_URL + '/sample/profile', 
    type: "get", 
    dataType: "text" 
}).done(function(data) { 
    $('#idcontainer').html(data); 
}); 

私のAJAXフロントエンドでセッションを動作させるにはどうしますか?

答えて

0

あなたはAJAX呼び出しからリダイレクトを処理したい場合は、次の質問を見てとることができます。より良いソリューションがかどうかを確認することがあります

要求はAJAXで、あなたがフロントエンドで処理できるHTTPステータスでJSONレスポンスを送信します。

JSON応答:

そして、あなたのインターセプタで:他のほとんどの近代的なライブラリと一緒にいないすべてのAJAXライブラリがX-Requested-Withヘッダーを含める

boolean ajax = "XMLHttpRequest".equals(request.getHeader("X-Requested-With")); 
if (ajax) { 
    response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); 
    response.getWriter().write(responseToClient); 
    response.getWriter().flush(); 
    response.getWriter().close(); 
} else { 
    response.sendRedirect(request.getContextPath() + "/error"); 
} 

ますが、jQueryが行います。あなたのJavaScript関数で次に

:また

$.ajax({ 
    url: ROOT_URL + '/sample/profile', 
    type: "get", 
    dataType: "text" 
}).done(function(data) { 
    // handle success HTML 
}).fail(function (data) { 
    // parse JSON and alert error message 
}); 

、あなたがHTMLのAJAX要求から返されたページの内容を置き換えるためにAJAX要求を使用しているようです。代わりにJSONレスポンスを使用して、あなたはまただけではなく、エラーのHTMLを返すことができ、あなたは、プロファイルのHTMLコンテンツを返しているのと同じ方法でそれを表示:

HTMLレスポンス:

<h1>Error</h1> 

<p class="error">You must be logged in to view this content.</p> 

とHTMLを設定しますあなたのdoneコールバックと同様:

.fail(function (data) { 
    $('#idcontainer').html(data); 
}); 
+0

ただのミスですが、私はそれを編集しました。リダイレクトを扱う他の例がありますか? – guwop69

+0

@ guwop69私は適切に答えを編集しました。 – Casey

関連する問題