最新の安定バージョンについては、Spring Security 6.4.2 を使用してください! |
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);
テストの合間に |