[英]How to test stateless with MockMvc and Mockito
我最近繼承了一些Java代碼,需要在HttpSecurity配置中將其切換為無狀態:
http.csrf().disable()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
此后,使用MockMvc的某些測試失敗。 我知道@WithMockUser將無法在無狀態的情況下工作,那么我應該如何更改以使其通過? 這是一個示例測試:
@Before
public void setUp() throws Exception {
this.mockMvc = MockMvcBuilders.standaloneSetup(apAdminController)
.apply(SecurityMockMvcConfigurers.springSecurity(springSecurityFilterChain))
.setCustomArgumentResolvers(new PageableHandlerMethodArgumentResolver())
.build();
storeUser = new StoreUser();
storeUser.setUsername("smith");
storeUser.setEnabled(true);
}
@Test
@WithMockUser(roles = "ADMIN")
public void testViewStoreUserWithAdmin() {
try {
mockMvc.perform(
get("{resource}/1", RESOURCE).with(testSecurityContext()))
.andDo(print())
.andExpect(status().isOk());
} catch (Exception e) {
fail("Test failed: " + e.getMessage());
}
}
我花了很長時間才能找到答案,這是我最終得到的結果,以防萬一有人在掙扎:
在測試中將SessionCreationPolicy從'If_REQUIRED'或'ALWAYS'更改為'STATELESS'之后:替換import .SecurityMockMvcRequestPostProcessors.testSecurityContext;
導入.SecurityMockMvcRequestPostProcessors.user;
並在設置中使用它:
this.mockMvc = MockMvcBuilders.webAppContextSetup(context)
.addFilters(springSecurityFilterChain)
.build();
刪除所有注釋@WithMockUser
,最后更改
get("{resource}", RESOURCE).with(testSecurityContext()))
以get("{resource}", RESOURCE).with(user("admin").roles("ADMIN")))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.