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);
請記住在測試之間清除 |