@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 不是必需的。我在我的案例中验证了这个场景。
我正在使用 @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 不是必需的。我在我的案例中验证了这个场景。