2016-07-25 16 views
1

Ich verwende @WithMockUser, um eine Controller-Methode zu testen, die mit Basic Auth in einem einfachen Springboot-Webdienst gesichert ist. Meine Anmerkung wie folgt aussieht:@WithMockUser ignoriert Benutzername, Passwortfelder?

@WithMockUser(username = 'admin', password = 'mypassword', roles = ['ADMIN']) 

Es scheint jedoch, dass der Benutzername und das Passwort-Feld ignoriert werden. Der Test wird bestanden, auch wenn ich einen falschen Benutzernamen oder ein falsches Passwort angegeben habe. Das Rollenfeld scheint jedoch verwendet zu werden, und der Test schlägt fehl, wenn eine ungültige Rolle bereitgestellt wird.

Vielleicht missverstehe ich die Rolle dieser Anmerkung, aber sollte ich in der Lage sein, sie zu verwenden, um das Verhalten von falschen Anmeldeinformationen zu überprüfen, die an eine gesicherte Methode geliefert werden?

Danke!

--John

+0

Nein, sollten Sie nicht. Was es tut, repopuliert den 'SecurityContext' mit dem gegebenen Benutzer. Es erlaubt Ihnen nicht, etwas anderes zu testen. Wenn Sie das möchten, müssen Sie einen Systemtest oder einen vollständigen Integrationstest durchführen, indem Sie die Springs Mock MVC-Testunterstützung einschließlich der manuellen Registrierung Ihrer Sicherheitskonfiguration verwenden. –

Antwort

0

Wenn Sie Spring MVC-Test (dh MockMvc) verwenden, würden Sie so etwas wie das folgende tun:

mvc.perform(get("/").with(httpBasic("user","password"))) // ... 

Diese im Testing HTTP Basic Authentication Abschnitt des dokumentiert Spring Security Referenzhandbuch.

Wenn Sie Ihren Test zum Starten von Spring Boot mit einem eingebetteten Servlet-Container konfiguriert haben, können Sie Spring Boot TestRestTemplate verwenden, das "Basic HTTP authentication (mit Benutzername und Kennwort)" unterstützt.