Вот мои настройки:
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/signup", "/health").permitAll()
.anyRequest().authenticated().and()
.formLogin()
.loginPage("/login")
.permitAll()
...
Тестовый класс:
@ExtendWith(SpringExtension.class)
@WebMvcTest
@WithMockUser
class ApiControllerTest {
...
@WithMockUser
отлично работает с ниже GET:
mockMvc.perform(get("/api/book/{id}", id))
.andExpect(status().isOk())
...
, но не сPOST:
mockMvc.perform(post("/api/book")
.contentType(MediaType.APPLICATION_JSON)
.content(payload))
.andExpect(status().isCreated())
...
Когда я просматриваю логи для MockHttpServletResponse, я замечаю, что ответ дает перенаправление на страницу входа, как показано ниже:
MockHttpServletResponse:
Status = 302
Error message = null
Headers = [X-Content-Type-Options:"nosniff", X-XSS-Protection:"1; mode=block", Cache-Control:"no-cache, no-store, max-age=0, must-revalidate", Pragma:"no-cache", Expires:"0", X-Frame-Options:"DENY", Location:"/login"]
Content type = null
Body =
Forwarded URL = null
Redirected URL = /login
Cookies = []
Я знаю, что @WithMockUser
обеспечивает хорошее количество значений по умолчанию для ложной аутентификации пользователя. Почему он не работает для запроса API с отслеживанием состояния?