依赖域约束进行验证是一种好习惯

时间:2013-09-19 08:59:30

标签: java validation grails

使用email(unique:true)之类的域约束来验证用户输入,然后依靠message.properties输入(例如className.email.unique=Email address already in use)来创建错误消息是一种好习惯。或者,在尝试持久保存到域之前,是否更好的做法是在Web服务中进行一些客户端验证或某些检查?

2 个答案:

答案 0 :(得分:2)

通常的做法是同时使用客户端和服务器端。

客户端验证为用户增加了便利性,可以减少带宽或改善工作流程,但不是100%可靠。

客户端验证具有显着的美学吸引力,并且能够在后期操作之前提醒用户错误,它看起来会更好但对用户来说很好但不会阻止不良输入,它纯粹是一种美学选择改善用户与页面交互的方式,并希望在正确完成之前减少发送多个错误输入的带宽。

页面的来源可以在本地进行编辑,以便禁用或绕过最完善的验证并完全禁止它,因此您在客户端无法做的任何事情都无法阻止确定的用户制作乱七八糟的系统。

这意味着您还需要进行良好的服务器端验证,最好是尝试保护自己免受注入,其他类型的无意义用户可能会有意或无意地启动,尤其是因为您不在网上。通过同时进行两种验证来减少故障点是首选方式,因为它们都会增加价值。

答案 1 :(得分:0)

接受请求有效负载时,应该考虑在控制器操作上使用CommandObjects。

http://grails.org/doc/latest/guide/single.html#commandObjects

命令对象允许您将验证规则/约束放在请求有效负载上。现在这很好,因为您应用了特定于来自Web的有效负载请求的新约束,而不会使其达到您的逻辑。一个很酷的功能是你可以继承域约束。

@grails.validation.Validateable
class LoginCommand {
    String username
    String password
    static constraints = {
       username(blank: false, minSize: 6)
       password(blank: false, minSize: 6)
    }
}