![](/img/trans.png)
[英]How can I use Wordpress to authenticate a user in a spring web application?
[英]How can I authenticate a system user for scheduled processes in Spring?
我們有一個Quartz / Spring Batch作業,為了審計日志記錄,我們希望將它作為系統用戶進行“認證”。 我們的一些方法依賴於獲取SecurityContext來執行此操作。 運行此作業的方式是可信的(或經過身份驗證)。 我們不想實際使用密碼或其他令牌(因為該過程基本上總是由石英生成)。
我試過這個
private void authenticate() {
UserDetails admin = userDetailsService.loadUserByUsername( "admin" );
RunAsUserToken token = new RunAsUserToken(
UUID.randomUUID().toString(), admin, admin.getAuthorities(), null , null );
Authentication user = authenticationManager.authenticate( token );
if ( user.isAuthenticated() ) {
SecurityContext sc = new SecurityContextImpl();
sc.setAuthentication( user );
SecurityContextHolder.setContext( sc );
}
}
但它導致了
org.springframework.security.authentication.ProviderNotFoundException: No AuthenticationProvider found for org.springframework.security.access.intercept.RunAsUserToken
而且我不確定一些RunAsUserToken參數是做什么的(例如密鑰)或者我應該在Credentials方面提供什么。
我如何驗證或以其他方式設置安全上下文,就像它被認證為此用戶一樣?
我還不確定RunAsUserToken。 我認為它的目的是在某人已經過身份驗證時使用,但應用程序將執行某些內容作為另一個用戶。
但是,也許你真的不需要那樣。 如果是這種情況,您可以這樣做:
Authentication auth = new UsernamePasswordAuthenticationToken(admin.getUsername(), admin.getPassword(), admin.getAuthorities());
SecurityContextHolder.getContext().setAuthentication(auth);
然后管理員將進行身份驗證。 此外,您不需要使用admin.getPassword()
因為它無論如何都不會被檢查。
請注意,您不必創建安全上下文:它已存在。 我認為默認情況下它是ThreadLocal
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.