![](/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.