|
此版本仍在开发中,尚未被视为稳定版本。如需最新稳定版本,请使用 Spring Security 7.0.4! |
SecurityMockMvcResultHandlers
Spring Security 提供了几种 ResultHandler 实现。
为了使用 Spring Security 的 ResultHandler 实现,请确保使用以下静态导入:
import static org.springframework.security.test.web.servlet.response.SecurityMockMvcResultHandlers.*;
导出 SecurityContext
经常我们需要查询一个仓库,以查看某个MockMvc请求是否实际持久化到了数据库中。
在某些情况下,我们的仓库查询使用了Spring Data集成来根据当前用户的用户名或其他属性过滤结果。
让我们来看一个例子:
一个仓库接口:
private interface MessageRepository extends JpaRepository<Message, Long> {
@Query("SELECT m.content FROM Message m WHERE m.sentBy = ?#{ principal?.name }")
List<String> findAllUserMessages();
}
我们的测试场景:<br/>
mvc
.perform(post("/message")
.content("New Message")
.contentType(MediaType.TEXT_PLAIN)
)
.andExpect(status().isOk());
List<String> userMessages = messageRepository.findAllUserMessages();
assertThat(userMessages).hasSize(1);
此测试不会通过,因为在我们的请求完成后,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);
|
请在测试之间清除 |