Здравствуйте, ребята, я пытаюсь создать пользовательскую форму входа с помощью весенней загрузки 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 днями и искал везде, но не смог найти решение, поэтому каждая идея и предложение будут оценены.