目前,我AuditorAware
实现使用Spring的SecurityContextHolder
检索当前审计保存创建/修改用户名:如何在异步任务中利用spring-data-jpa审计(AuditorAware)?
@Service
public class AuditorAwareImpl implements AuditorAware<UserDetails> {
private final UserDetailsService userDetailsService;
@Autowired
public AuditorAwareImpl(UserDetailsService userDetailsService){
this.userDetailsService = userDetailsService;
}
@Override
public UserDetails getCurrentAuditor() {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
return userDetailsService.loadUserByUsername(authentication.getName());
}
}
这工作得很好大部分操作,除了由Spring批次的SimpleAsyncTaskExecutor
执行异步任务。
的时候实体需要节省,因为SecurityContextHolder
擦拭的请求已被处理后,和jobLauncher.run(...)
回报asynchrnously,该AuditorAwareImpl.getCurrentAuditor()
方法引发NullPointerException
由于空getAuthentication()
:
java.lang.NullPointerException: null
at com.example.services.AuditorAwareImpl.getCurrentAuditor(AuditorAwareImpl.java:31)
at com.example.services.AuditorAwareImpl.getCurrentAuditor(AuditorAwareImpl.java:18)
到目前为止我已将请求调用用户作为非标识参数包含在Job中,但不知道从哪里开始。
当SecurityContextHolder
不适合寻找调用“审核员”时,利用spring的内置审核的推荐方式是什么?
我是这个问题的东西,任何解决方案呢? –
我的意思是坚持,不是东西(错误) –