0

Web プロジェクトに監査を実装したいと考えています。基本的に、私のアプリは、EJB プロジェクト (JAR) 内のメソッドを呼び出す Web プロジェクト (WAR) によって構成されています。すべては、コンテナ (Jboss およびおそらく近い将来 Websphere) にデプロイされる EAR 内にラップされます。

そのため、Web 側でユーザー セッションを取得し、ejb 側でエンティティと DAO を取得しました。一部のユーザー トランザクションに監査手順を実装したいので、変更を実行したユーザーの ID と共にデータ状態をデータベースに保持する必要があります。

EJB 側へのすべての呼び出しでユーザー ID を簡単に渡し、ビジネス メソッド内から監査を実行できますが、それではビジネス メソッドとクライアント メソッドが乱雑になります。

非常に興味深い監査フレームワークであるHibernate Enversを調べましたが、そのままではユーザー ID を監査しません。そのため、さらに調べて、この投稿を見つけました。これは、 RevisionListenerを使用してセッションからユーザー ID を取得し、データベースに保存する方法を説明しています。ただし、次の理由により、EAR アーキテクチャでは機能しないようです。この RevisionListener は、セッションからユーザー ID を取得するために FacesContext.getCurrentInstance() を使用するため、RevisionListener が Web 側にある必要があることを意味します。 EJB側ではなくアプリ...

まあ、私は自分自身を十分に明確にしたことを願っています:)

乾杯!

4

1 に答える 1

1

ビジネス ロジックを含むステートレスセッション Beanがすでにある場合、認証されたユーザーの名前はすでに EJB に渡されています。

sessionContext.getCallerPrincipal()呼び出し元のユーザーの名前を取得するために使用できます。

要件

  • Web アプリはlogin-config(で定義web.xml)を使用します。
  • JBoss Web アプリケーションはsecurity-domain( jboss.xml) を使用します。他のアプリケーション サーバーには、ログイン/認証を実装するための同様のパターンが必要です。
于 2013-08-08T17:28:52.710 に答える