我们正在使用JSF 1.x打开服务器端状态保存.我们遇到一个问题,即作为web-bot实现的恶意用户可以提交页面,而不提交预期在表单中的所有字段.这导致一些未被调用的验证器应被调用,等等.
我们希望阻止用户能够在表单中添加/删除字段并提交表单(如果他们想要提交表单,则所有预期字段都在那里).在过去,我使用页面上字段ID的MD5哈希加上在页面上保存为隐藏字段的未知短语和会话过滤器,在给定提交的字段ID的情况下生成预期哈希并将其与隐藏字段中的值.
有什么我可以用JSF开箱即用,以防止用户操纵表单?或者使用第三方库?
似乎JSF 2.0没有调用"类级别约束".引用SO答案
JSF 2.0不调用类级验证约束.来自JSF验证: JSF 2提供了与JSR-303约束的内置集成.在应用程序中使用bean验证时,JSF会自动使用UIInput值引用的Bean约束.
答案还建议使用SeamFaces来验证类级约束.
不幸的是,这是一个非选择,因为它引入了一个有点大量的依赖,只是为了验证应该验证什么.
我的问题是:
控制器中的手动验证是繁琐的,并且有很多重复的代码,因此我想避免使用它.
我试图通过注释要验证的Controller-Field来做到@Valid这一点,这没有帮助.
我想应该可以让"流程验证"阶段为我做这件事,或者在Filter"更新模型值"阶段之后挂钩类似于a的东西,它将通过验证集中运行模型值.