Аннотация @Size (min = 2, max = 30, message = "msg") не работает с методом onAuthenticationFailure () - PullRequest
0 голосов
/ 04 марта 2020

Я использую 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>

Моя проблема в том, что, если форма входа неверна, я не получаю сообщение на веб-интерфейсе.

Мои попытки:

  1. Как регистрация (где работает мое решение) Я пытался создать свой собственный метод, что-то вроде этого:

    @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' .

Я прошу советы.

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