2012-08-20 6 views
9

Ich habe die folgende Methode in Spring MVC und mit Spring Security:Wie simuliert man das @ PreAutorize-Tag in einem Integrationstest?

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

ich verwalten Authentifizierung, so etwas zu simulieren:

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

Aber ich weiß nicht, wie die Genehmigung mit @ einzurichten PreAutorisieren.

Wie kann ich meinen Testkontext korrekt einrichten, so dass der Zugriff nicht verweigert wird?

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) 

Antwort

1

Die Anmerkungen (@PreAuthorize, @PostAuthorize, @PreFilter, @PostFilter), die die Expression unterstützen Attribute pre & post-Aufruf Berechtigungsprüfungen durch die global-Methode-Behörde Namespace-Element aktiviert werden können.

Sie müssen folgenden Code in Ihre application-servlet.xml- oder Sicherheits-XML-Datei einfügen.

<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> 

prüfenspring-testcontext-framework und this post beantworten Ihre Frage sehr ähnlich.

+0

Sorry späte Antwort, das hat Spaß gemacht! 50 Bounty Punkte für Sie. Danke für Ihre Hilfe ! –

+0

@ThomasVervik ... Ich bin froh, dass meine Antwort Ihnen geholfen hat. :) –

0

Klingt, als ob Sie eine Scheinversion der Bean deklarieren möchten, die die Authentifizierung durchführt. Möglicherweise benötigen Sie eine test context.xml, um sie zu deklarieren.

+0

Ich habe bereits einen Text Kontext XML, das ist kein Problem. Irgendeine Idee, welche Bean für die Autorisierung verantwortlich ist? –

+0

Sie geben es nicht in Ihrer Spring-Sicherheitskonfiguration an? – TrueDub

0

Vielleicht überprüfen Sie this alten Beitrag und die official documentation 16.3 Method Security Expressions für XML-Konfiguration.

Ich glaube, Sie auf Ihrem xml erklären müssen:

auch Ihre Methode Token zur Authentifizierung könnte ein hasPermisions() sein. Prüfen 16.3.2 Built-In Expressions

Verwandte Themen