私はあなたがしばらく説明した問題に苦労しました...
セッションのAPI、リクエスト、レスポンスを使用して、ユーザーがすでにログインしているときにリダイレクトを実行しようとしましたが、Jettyを使用している場合、ユーザーの認証データがログインページから利用できないようです。
私はJSPとJettyにまったく慣れていません(クラスの割り当てに使用しています)が、理想的なソリューションではないとしても、かなりうまく機能するソリューションを作成しました。
まず、次のJSPを使用して、ログインページに変数を追加し、ページが既に読み込まれているかどうかを確認することで、小さなバイパスを作成しました。
<%
if(session.getAttribute("loginLoadedOnce") == "true")
{
response.sendRedirect("/redirect.jsp");
}
else
{
session.setAttribute("loginLoadedOnce", "true");
}
%>
そうすれば、属性が正しく設定されていない場合、ユーザーはログインを試みることができます。それ以外の場合は、リダイレクトページにリダイレクトされます。リダイレクトページにはユーザーデータがあり、ユーザーが特定の役割を持っているかどうかを確認できます。
リダイレクトページのJSPコードは次のようになりました。
<%
if(request.isUserInRole("admin"))
{
String url = response.encodeRedirectURL("admin/AdminPage.jsp");
response.sendRedirect(url);
}
else if(request.isUserInRole("accounting"))
{
String url = response.encodeRedirectURL("/accounting/Mainpage.jsp");
response.sendRedirect(url);
}
else
{
// Here the user has no role that we are aware of.
session.setAttribute("loginLoadedOnce", "false"); // stop redirect loop.
response.sendRedirect("/login.jsp");
}
%>
ここでは、ユーザーの役割を確認し、役割の正しいページにリダイレクトします。
現在のところ、ユーザーはログインページに戻る前にログアウトする必要があります。ログインページに戻るためのすべての暫定的な結果は、ブラウザの[戻る]ボタンを使用した場合でもリダイレクトされます。
これが誰かを助けることを願っています。