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();
}
我們的測試場景
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);
|
請記住在測試之間清除 |