2

クラウド プラットフォームで JavaEE Web サイトを実行しています。ここで、2 種類の認証を使用します。

  1. プラットフォームにうまく統合され、非常にうまく機能するSSOシステムからのものです。
  2. 問題のある部分です。1) からユーザーをセッション中に承認し、より制限されたリソースへのアクセスを許可したいと考えています。

いくつかの詳細

  • 1) からユーザーとそのデータを取得します。
  • ユーザーは最初に 2) へのアクセス許可を要求する必要がありますが、これは拒否または許可することができます。ユーザーは、サーブレットの範囲外にあるサービスから承認を取得します。
  • この目的のために、User-POJO (このユーザーのセッションをメンバーとして) をサービスに渡します。
  • サービスがこのユーザーに権限を付与すると、ユーザー セッションに属性が設定されます。

               userSession.setAttribute("auth", "granted");
    

そのリソースへのアクセスを制限するには、フィルターを使用します。

   @WebFilter("/supersecret/*")
   public class NiceFilter implements Filter {


   @Override
   public void doFilter(ServletRequest request, ServletResponse response,
        FilterChain chain) throws IOException, ServletException {

    HttpServletRequest req = (HttpServletRequest) request;
    HttpServletResponse res = (HttpServletResponse) response;

    HttpSession session = req.getSession();

    // check
    if (session.getAttribute("auth") != "granted")
        // redirect to login
    else
        chain.doFilter(req, res);

  }
      //...

これは現在機能していますが、私のソリューションは非常にずさんだと感じています。

  1. サーブレットの範囲外でユーザー セッションを変更することは、悪い習慣のようです。
  2. セキュリティ目的でセッションに属性を追加することは、おそらく良い考えではありませんか?

標準の JavaEE メカニズムを使用したいのですが、それらのほとんどは、web.xml でlogin-configを宣言するなど、auth-method 1) に既に使用されています。

この問題に対するより堅牢な解決策のアイデアはありますか?

前もって感謝します :)

4

0 に答える 0