@WithMockUser 忽略用户名、密码字段?

@WithMockUser ignores username, password fields?

我正在使用 @WithMockUser 在简单的 spring 引导 Web 服务中测试使用基本身份验证保护的控制器方法。我的注释看起来像:

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

然而,用户名和密码字段似乎被忽略了。即使我指定了错误的用户名或密码,测试也会通过。然而,roles 字段似乎确实被使用了,并且测试失败并提供了无效的角色。

也许我误解了这个注释的作用,但我是否应该能够使用它来验证向安全方法提供不正确凭据的行为?

谢谢!

--约翰

如果您正在使用 Spring MVC 测试(即 MockMvc),您将执行如下操作:

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

Spring 安全参考手册的 Testing HTTP Basic Authentication 部分对此进行了记录。

如果您已将测试配置为使用嵌入式 Servlet 容器启动 Spring 启动,则可以使用支持 "Basic HTTP authentication (with a username and password)".[=14 的 Spring 启动 TestRestTemplate =]

我也遇到过这种情况。我认为 @WithMockUser 足以测试安全服务。 user/password/roles 不是必需的。我在我的案例中验证了这个场景。