我正在尝试在我当前的项目中使用 Spring Data JPA (1.6.2)。一切似乎都运行良好,但我在实现 AuditorAware 接口时遇到了困难。
我的应用程序将部署到一个旧的 Apache Jetspeed JSR168 兼容门户。该门户负责用户身份验证/授权。因此,我不必使用像 Spring Security 或 Shiro 这样的安全框架。我的应用程序中的其他框架是:
- Struts 1.2.4(带有 Struts-Portal-Bridge)
- 春季 3.2.10
- JPA(Hibernate 3.6.10 作为 ORM 提供者)
我想在我的实体中使用 @CreatedBy 和 @LastModifiedBy 注释字段(我得到了 @CreatedDate 和 @LastModifiedDate 工作)。在我的应用程序中,我通常使用request.getUserPrincipal().getUserName()获取用户名。
但是在实现 AuditorAware 接口时如何获取用户名呢?
Spring Data JPA 文档中的示例实现:
class SpringSecurityAuditorAware implements AuditorAware<User> {
public User getCurrentAuditor() {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if (authentication == null || !authentication.isAuthenticated()) {
return null;
}
return ((MyUserDetails) authentication.getPrincipal()).getUser();
}
}
不知何故,我想像这样实现 AuditorAware:
class MyAuditorAware implements AuditorAware<String> {
public String getCurrentAuditor() {
return <<principal from servlet- or portletcontext>>.getUserName();
}
}
如何在不添加额外框架的情况下完成此操作?