2012-08-20 18 views
9

Ho il seguente metodo in Spring MVC e utilizza Primavera di sicurezza:Come simulare il tag @PreAutorize in un test di integrazione?

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

riesco a simulare l'autenticazione qualcosa di simile:

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

ma non so come impostare l'autorizzazione con @ PreAutorize.

Come si configura correttamente il contesto di test in modo che non venga negato l'accesso?

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) 

risposta

1

Le annotazioni (@PreAuthorize, @PostAuthorize, @PreFilter, @PostFilter) che supportano l'espressione attributi per consentire pre & post-invocazione controlli di autorizzazione sono attivati ​​attraverso l'elemento namespace globale-metodo-autorità.

È necessario aggiungere il seguente codice nel file 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> 

checkspring-testcontext-framework e this post rispondendo alla domanda molto simile al tuo.

+0

Scusa risposta in ritardo, questo ha funzionato è piaciuto il fascino! 50 punti di taglie per te. Grazie per l'aiuto ! –

+0

@ThomasVervik ... Sono lieto che la mia risposta ti abbia aiutato. :) –

0

Sembra che tu voglia dichiarare una versione fittizia del bean che esegue l'autenticazione. Potrebbe essere necessario un test context.xml per dichiararlo.

+0

Ho già un contesto testo xml, questo non è un problema. Qualche idea su quale bean è responsabile l'Autorizzazione? –

+0

Non lo si specifica nella configurazione di sicurezza di Spring? – TrueDub

0

Forse controllare this vecchio post e il official documentation 16,3 Espressioni di sicurezza del metodo per la configurazione xml.

Penso che è necessario dichiarare il vostro xml:

Anche il tuo metodo per autenticare gettone potrebbe essere un hasPermisions(). Controllare 16.3.2 Built-In Expressions

Problemi correlati