EJB 呼び出しに JBoss 4.0.4 (少し古い) で httpinvoker を使用しています。サーバーに呼び出しを行うクライアントが非常に多いため、サーバー内の呼び出しごとにクライアントを識別したいと考えています。
JBoss httpinvoker でこれを行う方法はありますか?
各 HTTP 要求でクライアントを識別するためにヘッダーを追加することは想像できますが、httpinvoker でヘッダーを追加する方法が見つかりません。
EJB 呼び出しに JBoss 4.0.4 (少し古い) で httpinvoker を使用しています。サーバーに呼び出しを行うクライアントが非常に多いため、サーバー内の呼び出しごとにクライアントを識別したいと考えています。
JBoss httpinvoker でこれを行う方法はありますか?
各 HTTP 要求でクライアントを識別するためにヘッダーを追加することは想像できますが、httpinvoker でヘッダーを追加する方法が見つかりません。
監査は名前に基づいて構築されているため、何らかの形で認証スキームに基づいています。
したがって、標準のクライアント認証インフラストラクチャを使用して問題を解決することをお勧めします。これは RMI でも機能し (HTTP にバインドされていません)、ユーザー ID は EJB にも渡されます。
サーバ
security-domain
(ejb.jar: META-INF/jboss.xml) に配置します。application-policy
他のものを使用できます。UsersRolesLoginModule
これは既定のポリシーであり、既に構成されています。UsersRolesLoginModule
クライアント
javax.security.auth.callback.CallbackHandler
。このコールバックは、認証にユーザーとパスワードが必要な場合に使用されます。javax.security.auth.login.LoginContext
ます。コールバック ハンドラを 2 番目の引数として渡します。login()
のインスタンスを呼び出すLoginContext
InitialContext
-Djava.security.auth.login.config=.../jboss-4/client/auth.conf
クライアント起動時に追加このようにして、ユーザー ID がクライアントから EJB に渡されます (標準認証プロセスの一部として)。getCallerPrincipal()
これで、EJB メソッドで、SessionContext
インスタンスを呼び出してユーザー ID を取得できるようになりました。これをJBoss 4.2.3に対してテストしました
追加情報: JBoss クライアント認証
補遺1:
RMI または HTTP を使用すると、パスワードは安全な方法で転送されません。この場合、ダミーのパスワードを使用するだけで、監査には問題ありません。
一方、RMI over SSL または HttpInvoker over HTTPS を使用すると、本物で安全な認証にすばやく変更できます。
補遺2:
ロールを定義せずに機能するかどうかはわかりません。おそらくあなたはしなければならない
security-role-ref
各 EJB に対して、security-role
およびmethod-permission
assembly-descriptor
アップデート
すでにログインモジュールがあるため、別の可能性があるかもしれません:
ログインモジュールのソースコードがある場合は、別のモジュールを使用TextCallback
してクライアントから追加情報 (この場合はユーザー ID) を取得できます。この情報は、カスタム を作成するために使用できますPrincipal
。EJB 内では、の結果をgetCallerPrincipal()
カスタム プリンシパルにキャストできます。