[SPRING] Spring의 예약 된 프로세스에 대해 시스템 사용자를 인증하려면 어떻게해야합니까?
SPRINGSpring의 예약 된 프로세스에 대해 시스템 사용자를 인증하려면 어떻게해야합니까?
우리는 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 매개 변수 중 일부 (예 : 키) 또는 자격 증명과 관련하여 무엇을 제공해야하는지 잘 모르겠습니다.
이 사용자로 인증 된 것처럼 보안 컨텍스트를 인증하거나 설정할 수있는 방법은 무엇입니까?
해결법
-
==============================
1.RunAsUserToken에 대해서는 아직 확실하지 않습니다. 나는 누군가가 이미 인증되었을 때 사용되도록 의도 된 것이라고 생각하지만, 응용 프로그램은 다른 사용자로서 무엇을 실행할 것인가.
RunAsUserToken에 대해서는 아직 확실하지 않습니다. 나는 누군가가 이미 인증되었을 때 사용되도록 의도 된 것이라고 생각하지만, 응용 프로그램은 다른 사용자로서 무엇을 실행할 것인가.
나는 그것을 여기에서 사용하는 예를 발견했다.
그러나 어쩌면 당신은 정말로 그것을 필요로하지 않습니다. 그렇다면 다음과 같이하면됩니다.
Authentication auth = new UsernamePasswordAuthenticationToken(admin.getUsername(), admin.getPassword(), admin.getAuthorities()); SecurityContextHolder.getContext().setAuthentication(auth);
그러면 관리자가 인증됩니다. 또한 admin.getPassword ()를 사용할 필요가 없습니다. 어쨌든 확인되지 않기 때문입니다.
보안 컨텍스트를 만들 필요는 없습니다. 이미 존재합니다. 기본적으로 ThreadLocal이라고 생각합니다.
from https://stackoverflow.com/questions/29684505/how-can-i-authenticate-a-system-user-for-scheduled-processes-in-spring by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring Framework에서 @PostConstruct로 초기화하면 객체 속성을 휘발성으로 표시해야합니까? (0) | 2019.05.06 |
---|---|
[SPRING] 특성의 구체적인 함수 구현이 스칼라 2.9.x에서는 메서드를 연결하도록 컴파일되었지만 2.8.x에서는 그렇지 않은 이유는 무엇입니까? (0) | 2019.05.06 |
[SPRING] Fileupload가 Primefaces에서 작동하지 않습니다. (0) | 2019.05.06 |
[SPRING] PackagesToScan을 검사하는 동안 일부 클래스를 무시하십시오. (0) | 2019.05.06 |
[SPRING] Spring JDBC batchUpdate를 사용할 때 생성 된 키를 가져 오는 방법이 있습니까? (0) | 2019.05.06 |