0

jboss 用のカスタム ログイン モジュールが実装されたエンタープライズ アプリケーションに取り組んでいます。ユーザーがユーザー名とパスワードを提供するフォームベースのセキュリティログインがあります。ログインモジュールでは、資格情報がデータベースに対してチェックされ、いくつかの追加チェックが行われます。ここで、ユーザーがワンタイム トークン (例: EF223222131 などのハッシュ文字列) を介してログインできるようにしたいと考えていますapplicationServer:8080/myApplication/login2.jsp?hash=EF223222131。このページlogin2.jspには、フォーム ベース認証用の同じフォームがあり、ユーザー名とパスワードを空白のままにして、フィールド ハッシュを追加します。すべてのフィールドが非表示になり、JavaScript がページの読み込み時にフォーム送信を開始します。ログインモジュールで、ハッシュを取得できました:

HttpServletRequest httpRequest = 
    (HttpServletRequest)PolicyContext.getContext("javax.servlet.http.HttpServletRequest");
    String hashV = httpRequest.getParameter("hashValue");

次に、データベース セット ID とロールからユーザーを取得loginOk = true;commitOk = true;、それぞれのメソッドで取得します。しかし、私の Web アプリケーションのユーザー名は空のままです。 httpRequest.getUserPrincipal().getName()空の文字列を返します。また、EJB を呼び出すと、から空の文字列が取得され sessionContext.getCallerPrincipal().getName()ます。

Login モジュールからこれらの値を設定する方法はありますか? または、URL のトークンを介してログインする別の方法はありますか?

jboss 4.0.3SP1 と Java 1.4.2 を使用していますが、新しい構成と同じである必要があると思います。

4

1 に答える 1

1

問題は、ログイン モジュールのサブジェクト オブジェクトにありました。メソッドには、commit()サブジェクト オブジェクトを定義するコードがありました。

if(!subject.getPrincipals().contains(identity)) {
        subject.getPrincipals().add(identity);
}
Group g = new SimpleGroup("Roles");
g.addMember(new SimplePrincipal((String) options.get("defaultRole")));
subject.getPrincipals().add(g);

さらに追加した場合:

Group callerPrincipal = new SimpleGroup("CallerPrincipal");
callerPrincipal.addMember(identity);
subject.getPrincipals().add(callerPrincipal);

新しいユーザー名がセッションで使用可能になる (httpRequest.getUserPrincipal().getName()サーブレットおよびsessionContext.getCallerPrincipal().getName()EJB から)

リンクから解決策を見つけました: Jboss community

于 2013-01-29T09:00:03.563 に答える