3

hiberbate3.5とspring3.xを使用しています

私はエンバーが働いており、..._audとrevinfoレコードが書き込まれています。

監査レコードにユーザー名を追加する必要があります。revinfoはseamアプリの例を見た中で最高の場所だと思いますが、jbossのspringアプリには何もありません。

誰かがこれを手伝ってもらえますか?

私の主な目的は、Windows認証ユーザーを記録できるようにすることです。

4

1 に答える 1

3

Seamを使用している場合、 Enversのドキュメントにこれに対する答えがあります。

public class ExampleListener implements RevisionListener {
    public void newRevision(Object revisionEntity) {
        ExampleRevEntity exampleRevEntity = (ExampleRevEntity) revisionEntity;
        Identity identity = (Identity) Component.getInstance("org.jboss.seam.security.identity");

        exampleRevEntity.setUsername(identity.getUsername());
    }
}

それで、あなたの質問は、Seamを使用しない場合、その時点で現在ログインしているユーザーを取得する方法だと思いますか?それを行うにはいくつかの方法があると確信しています。私たちはこのように行います。

  • ServletFilterを書く
  • フィルタで、セッションからプリンシパルを取得します(または、Spring Securityなどのセキュリティフレームワークを使用している場合はセキュリティコンテキスト)
  • log4jMDCに保存します

フィルタからのコード例

protected void beforeRequest(final HttpServletRequest request, final String message) {
  final Principal principal = request.getUserPrincipal();
  final String username = principal != null ? principal.getName() : null;
  if (username != null) {
    MDC.put(USER, username);
  }
}
protected void afterRequest(final HttpServletRequest request, final String message) {
  MDC.remove(USER);
}

get(String)MDCには静的メソッドがあるため、後でコード内のどこからでもユーザーを取得できます。

于 2013-01-03T13:09:56.557 に答える