首页 > 解决方案 > 使用 MockMVC 和 Spring Security 测试 Spring MVC 应用程序时在哪里重置 SecurityContextHolder

问题描述

我想测试 Spring MVC Web 应用程序。我的应用程序使用带有 Spring Security 的 JWT 身份验证,通过 PreAuthentificationFilter 调用的自定义 JWT 身份验证提供程序解析 JWT 令牌并将结果设置为 SecurityContextHolder。我使用mockMvc对其进行测试,并配置如下

this.mvc  = MockMvcBuilders.webAppContextSetup(webApplicationContext)
    .apply(springSecurity())
    .build();

在我的测试方法中,我调用了目标控制器 2 次。第一次的结果符合预期,但第二次不是。那是因为第一次 SecurityContextHolder 中的身份验证仍然保留在第二次。我尝试通过多种方式重置 SecurityContextHolder,例如在测试方法中重置它,或者在另一个自定义 Spring Security Filter 中重置它,等等,但它仍然存在。你能告诉我为什么会这样以及在哪里重置它。

非常感谢。

标签: javaspringspring-securitymockmvc

解决方案


推荐阅读