目前,我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的內置審覈的推薦方式是什麼?
我是這個問題的東西,任何解決方案呢? –
我的意思是堅持,不是東西(錯誤) –