0

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

4

2 回答 2

2

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

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

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

可以在本地编辑页面的源代码,以禁用或绕过格式最完善的验证并完全抑制它,因此您在客户端无能为力,无法阻止坚定的用户弄乱您的系统。

这意味着您还需要进行良好的服务器端验证,尝试保护自己免受注入和其他类型的废话用户可能有意或无意地退出是一种很好的做法,尤其是当您在网络上时。通过同时进行验证来减少故障点是首选方法,因为它们都增加了价值。

于 2013-09-19T09:18:23.813 回答
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)
    }
}
于 2013-09-19T15:47:03.723 回答