公众号,欢迎关注
书接上文
本文解决前面两个问题中的第二个问题,我们将为实体加上创建者和修改者的信息
首先创建一个返回授权用户信息的组件
获取授权用户信息
Spring Data JPA使用AuditorAware<T>
接口获取用户信息,AuditorAware
接口的泛型参数T描述了实体类中审计人的类型
现在开始创建一个返回用户信息的类:
- 创建
UsernameAuditorAware
类实现AuditorAware
接口,我们想存储String
类型的用户名,所以参数T设置为String
- 实现
getCurrentAuditor()
方法:- 从
SecurityContext
获取Authentication
对象 - 如果得到的授权对象为
null
或者未经认证,返回null
- 返回username
- 从
UsernameAuditorAware
类源码如下:
import org.springframework.data.domain.AuditorAware;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.User;
public class UsernameAuditorAware implements AuditorAware<String> {
@Override
public String getCurrentAuditor() {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if (authentication == null || !authentication.isAuthenticated()) {
return null;
}
return ((User) authentication.getPrincipal()).getUsername();
}
}
配置Application Context
下面我们将UsernameAuditorAware
配置成一个bean,修改PersistenceContext
类,步骤如下:
- 创建
auditorProvider()
方法返回一个AuditorAware<String>
对象 - 方法实现里new一个
UsernameAuditorAware
对象返回 - 给方法加上
@Bean
注解 - 加上
@EnableJpaAuditing
注解
PersistenceContext
类代码如下:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.auditing.DateTimeProvider;
import org.springframework.data.domain.AuditorAware;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
import org.sp