Spring boot пытается отобразить URL для обработки входа - PullRequest
0 голосов
/ 10 марта 2019

Здравствуйте, ребята, я пытаюсь создать пользовательскую форму входа с помощью весенней загрузки 2 и thymeleaf 3, приложение имеет 2 конфигурации безопасности: один для пользователей мобильных приложений, а другой - для ресторанов, который является веб-приложением. Я реализую пользовательскую форму входа для ресторанной части, нокогда форма входа в систему отправлена, весна пытается найти localhost: 8080 / {loginprocessingurl}, и это приводит к ошибке 404.Вот моя форма, контроллеры и конфигурация безопасности ниже:

@Configuration
    @Order(2)   // no order means order of config value is last
    public static class RestaurantSecurityConfig extends WebSecurityConfigurerAdapter{

        @Override
        protected void configure(HttpSecurity http) throws Exception{
            http.csrf().and()
            .antMatcher("/restaurant/**")  //antmatcher tekil şekilde urlleri farklı configler için gruplamada kullanılır
            .authorizeRequests()
                .antMatchers("/assets/**", "/webjars/**","/static/**").permitAll()
                .anyRequest().hasRole("RESTAURANT")
                .and()
            .formLogin()
                .loginPage("/login")
                .loginProcessingUrl("/restaurant/reslogin")
                .failureUrl("/restaurant/login?error")
                .defaultSuccessUrl("/restaurant/tables",true)
                .permitAll()
                .and()
            .logout()
            .logoutUrl("/restaurant/logout")
            .deleteCookies("JSESSIONID")
            ;
        }

Контроллеры:

@Controller
@RequestMapping(value="/restaurant")
public class RestaurantController {

    @RequestMapping(value="/login",method=RequestMethod.GET)
    public ModelAndView getlogin(Model model) {
        ModelAndView mav = new ModelAndView();
        mav.setViewName("login");
        return mav;
    }

и моя форма входа в систему:

  <form class="mt-5" name="f" th:action="@{/restaurant/reslogin}" method="post">
              <!-- <div th:if="${loginError}">
                    <div class="alert alert-danger">
                        Invalid username or password.
                    </div>
                </div> -->
              <div class="form-group">
                <label for="username">Restoran Kullanıcı Adı</label>
                <input class="form-control" id="username" name="username" placeholder="Kullanıcı Adı">
              </div>
              <div class="form-group">
                <label for="password">Parola</label>
                <input type="password"  class="form-control" id="password" name="password"  placeholder="Parola">
              </div>

            <button type="submit" class="btn btn-primary">Giriş</button>

            </form>

И я увидел тимилифне вводит ввод токена csrf, когда я смотрю на исходную страницу.Я использую тимилеф extras springsecurity версии 3.0.4, если я пишу ввод csrf вручную в форме

<input
  type="hidden"
  th:name="${_csrf.parameterName}"
  th:value="${_csrf.token}" />

, это выдает мне эту ошибку: EL1007E: Свойство или поле 'имя_параметра' не может быть найдено для нуля
Дело в том, что я знаю, что Spring должен обрабатывать URL-адрес обработки входа на задней стороне и выполнять аутентификацию (я сделал реализацию UserDetailsService и корректно переопределил метод configureGlobal WebSecurityConfigurationAdapter, насколько я знаю, потому что запросы мобильного приложения работают хорошо (другой класс @Configuration)) но вместо этого перенаправляет меня на URL-адрес успеха, он пытается отобразить этот URL-адрес для обработки входа.
Другая вещь, когда я не использую пользовательский URL-адрес для обработки входа в систему, вместо этого использую default / login для публикации формы входа, он говорит, что метод 405 не разрешен, но все остальные примеры, которые я пробовал в Интернете, работают так, и даже в книге «Begining Spring Boot 2» K.Siva Prasad Reddy я сделал форму login ex.который написан как я сказал выше, работает как шарм!Все версии зависимостей одинаковы!
Я имел дело с этими 2 днями и искал везде, но не смог найти решение, поэтому каждая идея и предложение будут оценены.

1 Ответ

0 голосов
/ 13 марта 2019

Я решил свою проблему, и это было вызвано отсутствием того же RequestMatcher в другом классе конфигурации, мой плохой.

http
    .antMatcher("/user/**")

Так что, если кто-нибудь из любителей весенней загрузки столкнулся с той же проблемой, убедитесь, что вы сопоставили 2 конфигурации для отдельных URL-адресов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...