在保存第一个域对象时,在默认安装rails时,它会提供像785787634
之类的花哨的随机ID。 Grails给出了1
。
在grails中制作难以猜测且不太可能相交的自动生成ID的首选方法是什么?
答案 0 :(得分:5)
Grails允许您自定义id生成器。见http://grails.org/doc/latest/guide/GORM.html#identity
在你的情况下,你可以考虑'uuid'或'guid'
答案 1 :(得分:4)
执行此操作的另一种方法是使用提供的默认ID,但在需要对项目进行公开(非安全)访问时,使用UUID添加专用列。
我认为这会很好用:
class Widget {
String uuid
static constraints = {
uuid unique: true
}
def beforeInsert() {
// optionally, replace the dashes by adding .replaceAll('-','')
uuid = UUID.randomUUID().toString()
}
}
然后你可以像这样使用控制器:
// url: app/public/widget/48b5451a-0d21-4a36-bcc0-88b129852f1b
PublicController {
def widget() {
Widget w = Widget.findByUuid(params.id)
...
}
}
这是自动编入索引的,所以它不会太慢,只有在公开查找窗口小部件时才会使用UUID。如果您有一个人登录,那么您可以执行安全检查,只需使用app/widget/edit/1
或类似的东西。
我不会依赖“随机数”作为任何方式的安全。即使数字不是连续的,猜测数字也能正常工作。相对而言,猜测UUID几乎是不可能的。但是,如果您拥有登录帐户,则授权检查最好。