我正在使用 hiberbate 3.5 和 spring 3.x
我有工作,现在正在写入 ... _aud 和 revinfo 记录。
我现在需要将用户名添加到审计记录中我猜 revinfo 是我见过的最好的地方,我看到了 seam 应用程序的例子,但 jboss 中的 spring 应用程序没有
任何人都可以帮忙吗?
我的主要目标是能够记录经过 Windows 身份验证的用户。
我正在使用 hiberbate 3.5 和 spring 3.x
我有工作,现在正在写入 ... _aud 和 revinfo 记录。
我现在需要将用户名添加到审计记录中我猜 revinfo 是我见过的最好的地方,我看到了 seam 应用程序的例子,但 jboss 中的 spring 应用程序没有
任何人都可以帮忙吗?
我的主要目标是能够记录经过 Windows 身份验证的用户。
如果您使用 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 ,那么如何检索当前登录的用户?我敢肯定有几种方法可以做到这一点,我们就是这样做的。
过滤器中的代码示例
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)
方法。