Атрибут запроса не найден после добавления Spring Security в приложение Spring Boot - PullRequest
0 голосов
/ 26 мая 2020

У меня запущено приложение 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";
    }

Когда я отлаживаю, заказ имеет тот же идентификатор, что и тот, который был добавлен в методе тестирования. Следующим шагом будет визуализация вида. Когда я продолжаю, появляется ошибка.

Где-то между методом контроллера и представлением параметр запроса исчезает. Это как-то связано с безопасностью, поскольку код работает без включенной защиты. Форма заказа найдена, поэтому страничка не запрещена. Безопасность отключает атрибуты запроса?

1 Ответ

1 голос
/ 03 июня 2020

Вы говорите, что это работало до Security, но есть ли у вас класс (DTO) OrderForm с полями, которые вам нужны в вашей форме? Я не вижу ни одного. Если вы не создадите его, а затем добавите в модель (это часть привязки):

@GetMapping("/orders/current")
    public String orderForm(Model model) {
        model.addAttribute("orderForm", new OrderForm())
        return "orderForm";
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...