2017-06-16 91 views
3

目前,我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的內置審覈的推薦方式是什麼?

+0

我是這個問題的東西,任何解決方案呢? –

+0

我的意思是堅持,不是東西(錯誤) –

回答