Как использовать атрибут сеанса (код капчи) в пользовательском ограничении проверки bean-компонента JSR-303?

1

Я хочу перенести проверку своего кода с Spring MVC-контроллером на класс, опубликованный из, потому что это последний элемент, который не проверяется с использованием API JSR-303.

В принципе, как вводить HttpSession или HttpServletRequest в JSR-303 contraint или Spring @ModelAttribute, представляя данные формы для проверки ввода captcha?

Предположим, у нас есть код captcha в атрибуте сеанса "captcha_code", как написать пользовательское ограничение JSR-303, которое будет сравнивать входные данные с этим атрибутом сеанса? Подобно:

class RegisterForm {

 ... email, password etc. ...

 @NotNull
 @Length( min = 6 , max = 6 )
 @EqualsToSessionAttribute("captcha_code") // How to make such constraint?
 private String captchaCode;

 ...
}

В конце концов, как ввести запрос/сеанс для создания объекта, чтобы я мог использовать свою (@FieldMatch) @FieldMatch JSR-303, которая заставляет два поля формы быть равными.

Основная проблема заключается в том, что даже если бы мы могли вставлять сеанс в пользовательское ограничение, объект, представляющий ограничение, создается только с первой проверкой, а затем кэшируется как singleton bean.

Теги:
spring
spring-mvc
validation
bean-validation

1 ответ

0

Вы можете сделать вашу весну Validator с помощью @Configurable.

Основная проблема заключается в том, что ограничение [..] создается только с первой проверкой и затем кэшируется как одноэлементный компонент.

Это было бы проблемой, если инжектируемый компонент не является областью действия прокси. По крайней мере, HttpServletRequest является таким прокси-сервером, поэтому вы найдете безопасный способ для своего сеанса.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню