【发布时间】:2015-06-23 10:29:43
【问题描述】:
我们有一个 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 参数的作用(例如密钥)或关于凭据我应该给它什么。
如何验证或以其他方式设置安全上下文,就好像它已作为该用户进行验证一样?
【问题讨论】:
-
你看过
SecurityContextHolder.setContext() -
@JohnR 是的,但我不确定如何像我需要的那样正确设置用户的上下文
标签: java spring authentication spring-security spring-3