Я использую Spring Security:
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
//...//
@Override
protected void configure (HttpSecurity http) throws Exception
http
.authorizeRequests()
.failureHandler(myAuthenticationFailureHandler ())
//...//
}
Далее:
public class MyAuthenticationFailureHandler implements AuthenticationFailureHandler {
private RedirectStrategy redirectStrategy = new DefaultRedirectStrategy();
@Override
public void onAuthenticationFailure(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, AuthenticationException e) throws IOException {
redirectStrategy.sendRedirect(httpServletRequest, httpServletResponse, "/users/login");
}
И мой объект входа представлен:
public class LoginForm {
@Size(min = 1, max = 5, message = "min 1 and max 5")
private String username;
@Size(min = 2, max = 6, message = "min 2 and max 6")
@NotNull
private String password;
и частью внешнего интерфейса:
<div><label for="password" th:value="*{password}">Password:</label></div>
<input id="password" type="password" name="password" th:value="*{password}"/>
<span class="formError" th:if="${#fields.hasErrors('password')}"
th:errors="*{password}">Invalid password</span>
Моя проблема в том, что, если форма входа неверна, я не получаю сообщение на веб-интерфейсе.
Мои попытки:
Как регистрация (где работает мое решение) Я пытался создать свой собственный метод, что-то вроде этого:
@RequestMapping(value = "/users/login", method = RequestMethod.POST)
public String loginPage(@Valid LoginForm loginForm, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
return "users/login";
}
return "redirect:/";
}
однако .failureHandler (мой AuthenticationFailureHandler () ) метод является приоритетным, и я вижу в отладчике, что программа не запускает мой метод.
Я думал добавить эту информацию в качестве заголовка / атрибута, но безуспешно, что-то вроде этого:
httpServletResponse.setHeader("passwordInvalid", "true");
httpServletRequest.setAttribute("passwordInvalid", "true");
Установите это сообщение, проверив содержимое ввода поле в Thymeleaf (без бэкэнда).
2-е и 3-е решение не подходит для меня, потому что я хотел бы узнать, как проверить поле и написать сообщение на веб-интерфейсе в соответствии с информация в аннотациях в классе LoginForm.
Моя цель также не добавлять какой-либо параметр ошибки в URL - 'myurl? errorparameter' .
Я прошу советы.