3

我正在使用 hiberbate 3.5 和 spring 3.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 这样的安全框架,则获取安全上下文)
  • 将其存储在log4j MDC中

过滤器中的代码示例

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);
}

稍后您可以从代码中的任何位置获取用户,因为 MDC 有一个静态get(String)方法。

于 2013-01-03T13:09:56.557 回答