【发布时间】:2020-09-23 16:50:43
【问题描述】:
我知道已经有类似的问题,here 和 here,关于这个问题,但提出的每个解决方案都未能帮助我。在大多数答案中也提到了this 库,但是(恕我直言)我想避免依赖外部库来测试一个简单的控制器。
所以,我有一个非常简单的 api,可以使用 keycloak 生成的不记名令牌进行访问,我想测试控制器。大致如下:
@Test
@DisplayName("Should be ok")
@WithMockUser
void whenCalled_shouldBeOk() throws Exception {
SecurityContext context = SecurityContextHolder.getContext();
Authentication authentication = context.getAuthentication();
mockMvc.perform(
post("/api/url/something")
.content("{}")
.contentType(APPLICATION_JSON)
.with(authentication(authentication))
).andExpect(status().isOk());
}
问题是我总是会收到KeycloakDeploymentBuilder 抛出的空指针异常,因为它缺少适配器配置。在我们的 SecurityConfig 中,我们扩展了 KeycloakWebSecurityConfigurerAdapter 并为应用程序进行了所有必需的配置,但我未能在测试中模拟/绕过此过程。通常,我会在使用 @WithMockUser 注释的测试中(当不使用 keycloak 时)找到解决此身份验证问题的方法,但这次不是。
是否有办法模拟适配器或过滤器进程以绕过此问题?
我已经尝试了其他问题(图书馆除外)中回答的所有问题,但没有成功。如果您有任何线索可以提供帮助或至少为我指明正确的方向(因为这可能是由于我对弹簧安全性缺乏了解),我们将不胜感激。
【问题讨论】:
-
不要评论为什么我的回答不能解决你的问题(或接受它......)
标签: java spring-boot keycloak