我正在使用hiberbate 3.5和spring 3.x
我有envers工作,现在正在写_aud和revinfo记录。
我现在需要将用户名添加到审计记录中我猜测revinfo是我见过的最好的地方,我看到了一个关于缝应用程序的例子,但jboss中没有春季应用程序
请有人帮忙解决这个问题。
我的主要目标是能够记录经过Windows身份验证的用户。
答案 0 :(得分:3)
如果您使用Seam,则为Envers文档has an answer。
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)
方法。