2013-05-09 48 views
0

我正在嘗試爲登錄創建登錄操作。我從數據庫中獲得價值。但問題是,當我用字符串檢查值時,它不能正常工作,其他部分執行並在瀏覽器中顯示消息。我正在使用grails 2.1.0。我不知道該怎麼做,但我認爲這是一個非常正常的問題。任何人都可以幫助我嗎?這裏是我下面的代碼:將字符串與grails控制器中的檢索值進行比較

def loginAction = { 
    def username = params?.username 
    def password = params?.password 
    def user = Login.findAllByUsernameAndPassword(username, password) 
    def status = user.status 
    def role = user.role 
    println(">>>>>>>>>>>>>>>>>>>>>>>> "+role); 

    if(role == 'admin'){ 
     render "Admin Login" 
    }else if(role == "teacher"){ 
     render "Teacher's Login" 
    }else if(role == "student"){ 
     render "student login" 
    }else{ 
     flash.message = message(code: "Log-In failed, Please try again !!!") 
     redirect(controller:"login",action:"login") 
    } 
} 

注意,println的作品,給下面的輸出:

>>>>>>>>>>>>>>>>>>>>>>>> [admin] 
+2

哈!我的建議是:不要創建自己的安全性,使用已知(例如spring安全插件) – 2013-05-09 09:40:43

+0

@ Mr.Cat我不知道該怎麼做。你能指導我嗎?! – 2013-05-09 09:43:25

+0

http://blog.springsource.org/2010/08/11/simplified-spring-security-with-grails/ – 2013-05-09 09:44:48

回答

1

您使用.findAllBy,讓你有一個用戶列表,在這一個元素名單。因此,角色變量具有[admin]值(請參閱提供的輸出),它是一個角色列表。字符串列表,而不是字符串。

您將此列表與admin作爲字符串值進行比較。所以,這是正確的["admin"] != "admin"

只需使用findBy代替,如:

def user = Login.findByUsernameAndPassword(username, password) 
+0

非常感謝伊戈爾。我現在正在使用它但我必須使用Cat先生的安全建議。 – 2013-05-09 10:06:51

+0

是的,MrCat對,使用Spring Security代替自己的實現要好得多 – 2013-05-09 10:11:04

相關問題