У нас есть задание 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 да, но я не уверен, как правильно получить контекст установить с пользователем, как мне нужно – xenoterracide