在保存第一個域對象的默認導軌安裝中,它提供了一個奇特的隨機ID,如785787634
或其他東西。 Grails給出1
。grails:隨機自動編號的
在grails中製作難以猜測和不太可能相交的自動生成的id的首選方法是什麼?
在保存第一個域對象的默認導軌安裝中,它提供了一個奇特的隨機ID,如785787634
或其他東西。 Grails給出1
。grails:隨機自動編號的
在grails中製作難以猜測和不太可能相交的自動生成的id的首選方法是什麼?
Grails允許您自定義ID生成器。看到http://grails.org/doc/latest/guide/GORM.html#identity
在你的情況,你可以考慮「uuid是」或「全局唯一標識符」
一種不同的方式來做到這一點是使用默認的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幾乎是不可能的。但是,如果您有登錄帳戶,授權檢查是最好的。
我其實不太關心安全性,因爲我是十字路口。也許我正在以這種錯誤的方式去解決問題..我會盡力隔離我遇到的問題併發佈一個新問題。 – Mikey 2012-02-16 00:31:17
順序自動生成的id的一個優點是它降低了插入到聚簇索引中的複雜性。調用隨機ID「更好」是主觀的。 – 2012-02-15 17:41:27
記住這一點,你可以檢查一下:http://danlynn.com/grails/grails-gorm-and-uuids/ – 2012-02-15 17:44:44
我聽說UUID可以影響性能。在你選擇它之前,你可能想要做一個基準 – 2012-02-15 18:00:44