1

JAAS が提供するフォーム認証を実装しました。すべてのページをテンプレート コードとして処理するため、毎回評価する必要があります。したがって、ユーザーが/loginに直接アクセスした場合、doGet 要求はそれを処理し、ログイン テンプレートを処理する必要があります。

ログインが成功した後、メインページにリダイレクトしたいと思います。ユーザーが/loginを再度選択すると、メイン ページにリダイレクトされます。

したがって、doGet リクエスト中に、ユーザーが承認されているかどうか、おそらくどの認証かを知る必要があります。どうすれば確認できますか? それともこのイディオムは間違っていますか?


それとも、これはrequest.isUserInRole(String role)によって行われますか? 認証と承認の両方を行うので?

4

1 に答える 1

3

HttpServletRequest#getRemoteUser()(ユーザー名) または#getUserPrincipal()(関連付けられたPrincpalオブジェクト) が返されないかどうかを確認することで、ユーザーがログインしているかどうかを確認できますnull

たとえばdoGet()/loginサーブレットでこれを行うことができます:

if (request.getRemoteUser() != null) {
    // Already logged in, so redirect to some main page.
    response.sendRedirect(request.getContextPath() + "/main");
    return;
}

// ...

ログインしたユーザーが特定の役割を持っているかどうかのみをチェックします。#isUserInRole()これは通常、特定の役割の一部のページまたはページ セクションを制限する場合にのみ役立ちます。したがって、すべてのユーザーが共有する一般的な役割がない限り、これは役に立ちません。

リダイレクトされた理由と、別のユーザーとして再度ログインする適切な方法をエンドユーザーに通知するメッセージを追加するだけでよい場合があります。例: 「すでにログインしています。別のユーザーとしてログインする必要がある場合は、まずログアウト ページに移動してください。」または、リダイレクトパラメータに基づいて条件付きで表示されるメインページで。

于 2012-06-25T20:26:41.163 に答える