java - 使用 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 中重置它,等等,但它仍然存在。你能告诉我为什么会这样以及在哪里重置它。
非常感谢。
解决方案
推荐阅读
- amazon-web-services - 无法使用 VPC 端点登录 ECR
- bash - 我可以同时将 cmder 用于 Git Bash 和其他命令行功能,如 dotnet、ng 等吗?
- javascript - contenteditable="false" 属性不适用于角度 10 中动态创建的跨度
- ms-word - 在重新缩放科学数字和图表时保持相同的字体大小
- image - 为什么我的图像(本地资产或下载的资产)没有在 iOS 14 上显示,而是在使用 ReactNative 0.62.x 的 Android 上显示?
- java - 将 android studio 更新到 4.2 Beta1 后,Gradle 构建失败
- laravel - 拉拉维尔。选择是否需要支点
- java - 无法使用 Java 库访问带有 Java 类的手动创建的资产文件夹
- javascript - IE11 中的 document.referrer 为空
- angular - 如何在打字稿中插入接口数组的特定索引?