2012-04-26 10 views
5

Ben Şimdi bir arka plan görevi bu yöntemi çağırmanız gerekir Yay Güvenliği: Arka plan görevinde @PreAuthorize ile güvenli yöntem çağırma yöntemi nedir?

@PreAuthorize("hasRole('ROLE_ADMIN') and (#action.userId != principal.id)") 
public void execute(EditAction action) 

@PreAuthorize

ile güvenli bir yöntem var. Ben sadece bu kodu çalıştırırsanız - bir istisna yakalamak:

AuthenticationCredentialsNotFoundException: Bir kimlik doğrulaması nesne SecurityContext

bulunamadı görünüyor, ben SecurityContext herhangi Authentication ayarlamanız gerekir. Yapabilirim:

  1. Arka plan görevleri için bazı özel AuthenticationToken yazın.
  2. Kullanıcı Adı ParolaAuthentication Kullanarak Sahte Kullanıcı.
  3. Arka plan görevlerinde güvenli yöntemleri kullanmayın.
  4. Başka bir şey var mı? Doğru yol

nedir? (Bir web uygulamasında kullanılırsa) Bir Kimlik Doğrulama kayıt olabilirsiniz

+0

Bazı kodları gösterebilir misiniz? Nasıl arıyorsun? –

+0

Bu şeffaf bir çağrı değil - komut desenini kullanıyoruz. Güvenli yöntem, İşleyici'nin bir yöntemidir. Bir "arka plan görevi" ile bir jms MessageListener veya bazı @Scheduled yöntemini kastediyorum. Bir yöntemi göndererek, güvenli bir şekilde yöntemi çağırıyorum. – Popandopolos

cevap

2

geçerli iş parçacığı ve oturumda kodunu kendiniz:

SecurityContextHolder.getContext().setAuthentication(token); 
session.put(HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY, SecurityContextHolder.getContext()); 

Bu sürece uygun rolleri eklerken bunun için standart UsernamePasswordAuthenticationToken kullanabilirsiniz.

İlgili konular