java - 如何在 Spring Controller 中模拟用户,并在某些内容丢失或未模拟时进行调试?

标签 java spring unit-testing spring-mvc

我有 Spring MVC 应用程序 (4.2.1),其 Controller 需要“ADMIN”权限。我正在尝试测试普通用户得到“403”,管理员得到“200”。它在浏览器中工作,但在我的单元测试中,两个测试都失败并返回“302”状态。

我相信我已经按照书本设置了所有内容以使用@WithMockUser。我想知道如何弄清楚为什么我会获得 302 状态。我怀疑它重定向到登录页面,因为它根本没有显示用户已登录,但我如何验证这一点?

@Test
@WithMockUser(roles={"USER","ADMIN"})
public void requestProtectedUrlWithAdminRole() throws Exception {
    mvc.perform(get("/admin/").with(csrf()))
        .andExpect(status().isOk())
        .andExpect(content().string(containsString("Admin")))
        .andReturn();
}

更新:

我发现可以通过在 perform 方法调用和第一个 .andExpect< 之间添加 .andDo(print()) 来打印请求和响应.

最佳答案

(添加我的评论作为答案)我认为您缺少监听器,这就是未使用注释的原因。将以下注释添加到您的测试类

@TestExecutionListeners( { WithSecurityContextTestExecutionListener.class })

您可能需要其他监听器来实现其他功能,但您绝对需要该监听器才能使注释 @WithMockUser 正常工作。

调试部分很棘手...您可以开始在 DispatcherServlet 上或在检查用户的过滤器中放置一些断点(很抱歉,但我不知道哪个类进行身份验证/授权)。

关于java - 如何在 Spring Controller 中模拟用户,并在某些内容丢失或未模拟时进行调试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34955223/

相关文章:

java - 使用部分单词匹配而不是余弦相似度来搜索java中2个字符串的相似度

java - 无法使用比较器对 null 进行排序

java - 如何为自定义 Quarkus ConfigProperties 使用配置映射

java - 使用 Stream.reduce 求逆和不正确

java - 如何设置 ImageView 的角半径

Spring Security 3.2 CSRF 禁用特定 URL

java - 从另一个 Maven 项目加载消息属性

unit-testing - 找不到符号导入 dagger.hilt.android.internal.Contexts

javascript - meteor 测试 : Mocha doesn't find all test files

objective-c - Kiwi 规范单元测试 : Instance method '-attachToVerifier:verifier:' not found