2011-07-31 17 views

回答

7

也許把它分解成兩個表達式會有所幫助。 params.max ? params.int('max') : 10是三元表達式...其結果是第一個參數爲Math.min(其中100是另一個參數)。

看起來像最終的結果是有限的,以至多是100的整數,默認爲10

+0

哦,對了,明白了。以某種方式錯過了。謝謝 – Ray

14

是否清楚了嗎?

def max = params.max? params.int('max') : 10 
Math.min(max, 100) 

BTW,這是一個很好的成語流行的Grails - 如果參數max存在,讀它,如果超過給定值(100默認情況下),它截斷爲100。這樣攻擊者或惡意用戶就不會讓你的應用程序從數據庫中返回任意大量的數據。

+0

我明白了,謝謝澄清限制網站攻擊者的價值。 – Ray

0

在防範攻擊時,您可能還需要查看底部邊界。我只是在grails中碰到過這個2.4.4:小於1的任何東西似乎都會返回所有記錄。它沒有記錄,源似乎檢查值> -1,但我發現我必須檢查值> 0:

//Use value, if found, else 20 
int max = params.getInt('max') ?: 20 

//no less than 1, no more than 100: max < 1 returns ALL records (grails 2.4.4) 
max = Math.max(max, 1) 
max = Math.min(max, 100) 

Domain.list(max: max)