0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

JUnitで急に403エラーが起こった時の原因である可能性になる要因

Posted at

JUnitで急に403エラーが起こった時の原因である可能性になる要因

恐らくSpring Boot 2.5以前のバージョンを使用していた場合に、2.7などのバージョンに変更した場合、Spring Securityによるテストが強制され、@AutoConfigureMockMvcで、
mockMvc.performを呼び出した際に、403となる。
直近でソースを修正していないにも関わらず、@SpringBootTestのテストが急にmockMvc.performを呼び出しているテストが403で想定結果と一致しない場合は、上記が原因の可能性が高い。
(私の場合は、Spring Boot 2.2から2.7への変更のため、当問題が発生しました。)

解決方法

  • 引き続き、Spring Securityのテストを行う必要がない場合、

※Spring Securityを無視することになるので、バージョンアップによってSpring Securityのテストが追加で必要になる場合は使用しないでください。
(Spring Securityのロールを使用して、権限制御を行っている場合など、)

- @AutoConfigureMockMvc
+ @AutoConfigureMockMvc(addFilters = false)

(addFilters = false)を付与。
これにより、Spring SecurityのFilter Chainを無効化することができ、従来のテストを行うことができる。

  • Spring Securityのテストを行う必要がある場合、
@Test
+ @WithMockUser(username = "admin", roles = {"ADMIN"})
void accessAdminEndpointWithAdminRole() throws Exception {
	mockMvc.perform(get("/admin-endpoint"))
		.andExpect(status().isOk());
}

@WithMockUseを使用して適切なロールを付与する。どのロールを設定するかは、ソース依存ですが、SecurityConfigなどの名前のファイルで、SecurityFilterChainを定義している部分で、
ロールによる制御を行っている可能性があるため、それに対応したロールを設定し、呼び出しを行うことでロールによる権限制御を含めたうえでテストを行うことができる。
※この場合、ADMINロールを設定してます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?