当前位置: 首页 > 知识库问答 >
问题:

如何在自定义JSR-303 Bean验证约束中使用会话属性(验证码代码)?

邴俊友
2023-03-14

基本上,如何将HttpSession或HttpServletRequest注入JSR-303 contraint或Spring@ModelAttribute中,以表示发布的表单数据,从而验证captcha输入?

假设我们在“CAPTCHA_CODE”会话属性中有一个captcha代码,如何编写JSR-303自定义约束将输入与该会话属性进行比较?比如:

class RegisterForm {

 ... email, password etc. ...

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

 ...
}

最后,介绍如何将请求/会话注入form object,以便使用我的(自定义)@fieldmatchJSR-303注释强制两个表单字段相等。

共有1个答案

唐博文
2023-03-14

您可以使用@configurable来管理验证器spring。

主要问题是,[...The]约束只在首先进行验证的情况下创建,然后作为单例bean缓存

如果注入的bean不是限定范围的代理,这将是一个问题。至少HttpServletRequest是这样一个代理,因此您将找到一种安全的会话方式。

 类似资料:
  • 我有一个像下面这样的模型对象,带有自定义约束验证器。自定义验证器检查是否填充了fileName或小时。 有一种方法将此作为输入,它验证所有以下条件 > 条件不为空(通过默认验证器) criteria.id不为空(通过默认验证器) criteria.name不为空(通过默认验证器) 标准文件名或小时不为空(通过自定义验证器) 空评估(@NotNull@有效标准标准){} 现在,当我为这个模型类编写单

  • TLDR:我想要在单独的模块中单独的自定义bean验证定义及其ConstraintValidator实现。为此,我必须使用ConstraintMmap手动注册。它适用于带注释的类。但是定义的绑定不共享/可用于通过validation-constraints.xml.定义的验证如何修复?我试图调试它,以找出它在哪里初始化以及为什么会出现问题,但初始化这些远非易事。 动机: 一) 分离模块:如果API

  • 我有一个自定义注释@UniqueModel,它由ConstraintValidator验证: 问题是,我需要在调用存储库的safe()-方法之前进行验证,否则字段注入将无法工作。 因此,我创建了一个带有@Valid注释的委托方法,以便在以下情况之前强制进行唯一验证: 不幸的是,这不起作用,似乎@Valid注释被Spring忽略了。 我如何确保验证的正确时间?

  • 我已经为此斗争了好几天,我已经阅读了这里的所有讨论,但没有解决方案...... 我有一个自定义约束… 独一无二.java 这是由UniqueConstraintValidator使用的.java 现在,我的模型有这个注释,我需要在其中验证字段的唯一性 现在,我知道自定义注释在更新现有对象时不起作用,但是现在我需要了解它是如何工作的。假设我们想要添加一个新对象。 当我试图保存一个已经存在的值时,我得

  • 编写自定义约束时,一个验证器实现可以验证多个注释。例如,我有几个注释,它们规定了不同的@size注释,但我希望它们都指向同一个验证器类,该类执行一些全局检查,即所有注释都必须与某个正则表达式匹配。据我所知,该实现采用了一种注释类型。 一个注释 验证器

  • 我正在用Spring和Thymeleaf填表: MyForm如下所示: 正如您所看到的,我做了一个自定义注释,它应该检查输入值是否可以解析为: 现在在我的Controller类中,我正在执行以下操作: 但是,当试图将放入文本字段以测试验证时,获取: 下面是我读到的示例,并希望用自定义验证器进行扩展:http://viralpatel.net/blogs/spring-mvc-hashmap-for