У меня запущено приложение Spring Boot. Как только я добавил Spring Security, приложение выдало ошибку.
У меня есть форма, поддерживаемая компонентом. Когда я включаю Spring Security, компонент формы не может быть найден. До добавления Spring Security компонент и форма работали.
Ошибка, которую я получаю после выполнения запроса GET к форме:
Neither BindingResult nor plain target object for bean name 'orderActive' available as request attribute
Форма использует пакет ThymeLeaf.
Spring Конфигурация безопасности
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth
.inMemoryAuthentication()
.withUser("buzz")
.password("{noop}infinity")
.authorities("ROLE_USER");
}
}
Метод контроллера
@GetMapping("/orders/current")
public String orderForm() {
return "orderForm";
}
Аннотации тестового класса
@SpringBootTest
@AutoConfigureMockMvc
class DesignTacoControllerTest {
Метод тестирования
@WithMockUser("buzz")
@Test
public void testProcessDesignGet() throws Exception {
mockMvc.perform(get("/orders/current")
.requestAttr("orderActive", new Order()))
.andExpect(status().isOk());
}
orderForm
<form method="POST" th:action="@{/orders}" th:object="${orderActive}">
Я попытался добавить RequestAttribute в контроллер метод.
@GetMapping("/orders/current")
public String orderForm(@RequestAttribute("orderActive") Order orderActive) {
return "orderForm";
}
Когда я отлаживаю, заказ имеет тот же идентификатор, что и тот, который был добавлен в методе тестирования. Следующим шагом будет визуализация вида. Когда я продолжаю, появляется ошибка.
Где-то между методом контроллера и представлением параметр запроса исчезает. Это как-то связано с безопасностью, поскольку код работает без включенной защиты. Форма заказа найдена, поэтому страничка не запрещена. Безопасность отключает атрибуты запроса?