que tienen un método asegurado con @PreAuthorizeSpring Security: ¿Cuál es la forma correcta de llamar al método asegurado con @PreAuthorize en la tarea en segundo plano?
@PreAuthorize("hasRole('ROLE_ADMIN') and (#action.userId != principal.id)")
public void execute(EditAction action)
Ahora tengo que llamar a este método de una tarea en segundo plano. Si sólo tiene que ejecutar este código - Cojo una excepción:
AuthenticationCredentialsNotFoundException: Un objeto de autenticación no se encontró en el SecurityContext
Parece, tengo que configurar ningún tipo de autenticación a SecurityContext. Puedo:
- Escribir un AuthenticationToken personalizado para las tareas en segundo plano.
- Use UsernamePasswordAuthenticationToken con el usuario falso.
- No utilice métodos seguros en tareas en segundo plano.
- ¿Algo más?
¿Cuál es el camino correcto?
¿Puedes mostrar algún código? ¿Cómo lo llamas? –
Esta no es una llamada transparente; estamos usando un patrón de comando. El método seguro es un método de Handler. Por una "tarea en segundo plano" me refiero a un MessageListener jms o algún método @Scheduled. Estoy llamando al método seguro de alguna manera, como lo llamo procesando servlet, despachando una Acción. – Popandopolos