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) }
        }
    }