SecurityMockMvcResultMatchers
リクエストについて、さまざまなセキュリティ関連のアサーションを作成することが望ましい場合があります。このニーズに対応するために、Spring Security Test サポートは Spring MVC Test の ResultMatcher
インターフェースを実装しています。Spring Security の ResultMatcher
実装を使用するには、次の静的インポートが使用されていることを確認してください。
Java
Kotlin
import static org.springframework.security.test.web.servlet.response.SecurityMockMvcResultMatchers.*;
import org.springframework.security.test.web.servlet.response.SecurityMockMvcResultMatchers.*
認証されていないアサーション
時には、MockMvc
呼び出しの結果に関連付けられた認証済みユーザーはいないと断言することが重要な場合があります。例: 無効なユーザー名とパスワードの送信をテストし、ユーザーが認証されていないことを確認できます。次のようなものを使用して、Spring Security のテストサポートでこれを簡単に行うことができます。
Java
Kotlin
mvc
.perform(formLogin().password("invalid"))
.andExpect(unauthenticated());
mvc
.perform(formLogin().password("invalid"))
.andExpect { unauthenticated() }
認証されたアサーション
多くの場合、認証されたユーザーが存在すると断言する必要があります。例: 認証に成功したことを確認したい場合があります。次のコードスニペットを使用すると、フォームベースのログインが成功したことを確認できます。
Java
Kotlin
mvc
.perform(formLogin())
.andExpect(authenticated());
mvc
.perform(formLogin())
.andExpect { authenticated() }
ユーザーのロールをアサートしたい場合、以下に示すように以前のコードを改善できます。
Java
Kotlin
mvc
.perform(formLogin().user("admin"))
.andExpect(authenticated().withRoles("USER","ADMIN"));
mvc
.perform(formLogin())
.andExpect { authenticated().withRoles("USER","ADMIN") }
または、ユーザー名を確認することもできます。
Java
Kotlin
mvc
.perform(formLogin().user("admin"))
.andExpect(authenticated().withUsername("admin"));
mvc
.perform(formLogin().user("admin"))
.andExpect { authenticated().withUsername("admin") }
アサーションを組み合わせることもできます。
Java
Kotlin
mvc
.perform(formLogin().user("admin"))
.andExpect(authenticated().withUsername("admin").withRoles("USER", "ADMIN"));
mvc
.perform(formLogin().user("admin"))
.andExpect { authenticated().withUsername("admin").withRoles("USER", "ADMIN") }
認証に関して任意のアサーションを作成することもできます
Java
Kotlin
mvc
.perform(formLogin())
.andExpect(authenticated().withAuthentication(auth ->
assertThat(auth).isInstanceOf(UsernamePasswordAuthenticationToken.class)));
mvc
.perform(formLogin())
.andExpect {
authenticated().withAuthentication { auth ->
assertThat(auth).isInstanceOf(UsernamePasswordAuthenticationToken::class.java) }
}
}