【发布时间】:2021-08-26 11:54:02
【问题描述】:
我有一个带有 REST 端点的应用程序,这些端点通过JWT 身份验证(外部资源服务器)进行保护。在将我的项目从 spring-boot 2.2.7 升级到 2.4.3 之后,一些 WebMvcTest 集成测试失败了。具体来说,没有 JWT 令牌的 GET 请求的测试用例 - 以前它们将返回 401 UNAUTHORIZED,现在它们将 302 REDIRECT 返回到 http://localhost/oauth2/authorization/keycloak。
@Test
void shouldNotAllowAccessForUnauthenticatedUsers() throws Exception {
// given
var params = createParams();
// when / then
mockMvc.perform(get(MY_URI)
.params(params)
.contentType(MediaType.APPLICATION_JSON)
.content(new byte[0]))
.andExpect(status().isUnauthorized());
}
没有导入自定义 Web 安全配置,仅导入 @WebMvcTest、@AutoConfigureMockMvc 以及相关控制器和映射器 bean 的 @ContextConfiguration。
POST 未经身份验证的测试中的方法返回 403(与升级前一样)。此问题仅在测试中出现 - 当应用程序运行时,调用没有令牌的任何端点会导致 401。
有没有办法将WebMvcTest 配置为返回401 而不是302?
【问题讨论】:
-
您使用的是什么版本的 Keyclock?您是否验证过它与 Spring Boot 2.4.x 兼容?
标签: java spring-boot testing spring-security jwt