对于最新的稳定版本,请使用 Spring Security 6.3.3! |
对于最新的稳定版本,请使用 Spring Security 6.3.3! |
Spring Security 提供了一些 s 实现。
为了使用 Spring Security 的实现,请确保使用以下静态导入:ResultHandler
ResultHandler
import static org.springframework.security.test.web.servlet.response.SecurityMockMvcResultHandlers.*;
导出 SecurityContext
很多时候,我们想要查询仓库,看看某个请求是否真的持久化在数据库中。
在某些情况下,我们的存储库查询使用 Spring Data Integration 根据当前用户的用户名或任何其他属性筛选结果。
让我们看一个例子:MockMvc
存储库接口:
private interface MessageRepository extends JpaRepository<Message, Long> {
@Query("SELECT m.content FROM Message m WHERE m.sentBy = ?#{ principal?.name }")
List<String> findAllUserMessages();
}
我们的测试场景:
mvc
.perform(post("/message")
.content("New Message")
.contentType(MediaType.TEXT_PLAIN)
)
.andExpect(status().isOk());
List<String> userMessages = messageRepository.findAllUserMessages();
assertThat(userMessages).hasSize(1);
这个测试不会通过,因为在我们的请求完成后,过滤器链将清除 。
然后我们可以将 导出到 our 并根据需要使用它:SecurityContextHolder
TestSecurityContextHolder
SecurityContextHolder
mvc
.perform(post("/message")
.content("New Message")
.contentType(MediaType.TEXT_PLAIN)
)
.andDo(exportTestSecurityContext())
.andExpect(status().isOk());
List<String> userMessages = messageRepository.findAllUserMessages();
assertThat(userMessages).hasSize(1);
请记住在测试之间清除 ,否则它可能会在测试之间泄漏 |
请记住在测试之间清除 ,否则它可能会在测试之间泄漏 |