2012-08-20 13 views
9

tengo el siguiente método en la primavera de MVC y usando Spring Security:¿Cómo se simula la etiqueta @PreAutorize en una prueba de integración?

@PreAuthorize("#phoneNumber == authentication.name") 
@RequestMapping(value = "/{phoneNumber}/start", method = RequestMethod.POST) 
public ModelAndView startUpgrading(@PathVariable("phoneNumber") String phoneNumber, 
     .... 
} 

me las arreglo para simular la autenticación de algo como esto:

public Authentication tryToAuthenticate(String accountName, String password) { 
     UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(accountName, password); 
    return authenticationManager.authenticate(token); 
} 

pero no sé cómo configurar la autorización con @ PreAutorizar

¿Cómo puedo configurar mi contexto de prueba correctamente para que no me den acceso denegado?

org.springframework.security.access.AccessDeniedException: Access is denied 
at org.springframework.security.access.vote.AffirmativeBased.decide(AffirmativeBased.java:83) 
at org.springframework.security.access.intercept.AbstractSecurityInterceptor.beforeInvocation(AbstractSecurityInterceptor.java:205) 

Respuesta

1

Las anotaciones (@PreAuthorize, @PostAuthorize, @PreFilter, @PostFilter) que soportan los atributos de expresión para permitir pre & comprobaciones de autorización después de la invocación están habilitadas a través del elemento de espacio de nombres método de autoridad global.

Debe agregar el siguiente código en el archivo application-servlet.xml o security xml.

<security:global-method-security pre-post-annotations="enabled" > 
    <security:expression-handler ref="expressionHandler"/> 
</security:global-method-security> 

<beans:bean id="expressionHandler" class="org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler"> 
    <beans:property name="permissionEvaluator" ref="permissionEvaluator"/> 
</beans:bean> 

Comprobarspring-testcontext-framework y this post responder a la pregunta muy similar a la suya.

+0

Disculpa tarde, ¡esto funcionó como el encanto! 50 puntos de recompensa para ti. Gracias por tu ayuda ! –

+0

@ThomasVervik ... Me alegro de que mi respuesta te haya ayudado. :) –

0

Parece que quiere declarar una versión simulada del bean que realiza la autenticación. Es posible que necesite una prueba context.xml para declararlo.

+0

Ya tengo un contexto de texto xml, no hay problema. ¿Alguna idea de qué bean es responsable de la Autorización? –

+0

¿No lo especifica en su configuración de seguridad Spring? – TrueDub

Cuestiones relacionadas