Wir haben einen Quartz/Spring Batch-Job, den wir für Audit-Logging-Zwecke gerne als Systembenutzer "authentifizieren" möchten. Einige unserer Methoden benötigen dazu den SecurityContext. Die Methoden zum Ausführen dieses Jobs sind vertrauenswürdig (oder authentifiziert). Wir wollen kein Passwort oder anderes Token verwenden (da der Prozess grundsätzlich immer von Quarz erzeugt wird).Wie kann ich einen Systembenutzer im Frühling für geplante Prozesse authentifizieren?
Ich habe versucht, diese
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);
}
}
aber es führte zu
org.springframework.security.authentication.ProviderNotFoundException: No AuthenticationProvider found for org.springframework.security.access.intercept.RunAsUserToken
und ich bin mir nicht sicher, was einige RunAsUserToken Parameter tun (zB Schlüssel) oder was soll ich es in Bezug auf sein geben zu Anmeldeinformationen.
Wie kann ich den Sicherheitskontext authentifizieren oder anderweitig festlegen, als wäre er als dieser Benutzer authentifiziert?
Haben Sie sich 'SecurityContextHolder.setContext()' –
@JohnR ja, aber ich bin mir nicht sicher, wie man richtig den Zusammenhang mit dem Benutzer einrichten zu bekommen, wie ich zu – xenoterracide