在grails中的不同控制器中进行身份验证?

在grails中的不同控制器中进行身份验证?,grails,controller,Grails,Controller,因此,我成功地登录了grails应用程序。 但是我想把一些函数分成不同的控制器 例如: package MyApp class CustomerController { /*Keeping the scaffold for admin purposes.*/ static scaffold = Customer //write redirects and make exceptions for scaffolds // def index() { } /* * Access

因此,我成功地登录了grails应用程序。 但是我想把一些函数分成不同的控制器

例如:

package MyApp

class CustomerController {

/*Keeping the scaffold for admin purposes.*/   
static scaffold = Customer

//write redirects and make exceptions for scaffolds
//  def index() { }  

/*
 * Access controllers are ordered after application flow. 
 **/

def login(){    
}

/*
 * Authentication based on email adress as the identifier.
 * 
 **/
def authenticate() {
    def authPwd 
    def authUser

    if(User.findByEmail(params.email) == null){

      flash.message = "login failed"
      redirect(action: "login")

    }else{
        authUser = User.findByEmail(params.email)
        authPwd = authUser.getPassword()        

        if(authPwd == params.pwd){
            session["user"] = authUser
            session["customer"] = authUser.getCompany()

            println "current user is: " + session["user"]
            println "current customer is: " + session["customer"]

            redirect(controller: "portal", action: "start")
        }else{
            flash.message = "login failed"
            redirect(action: "login")
        }
    }
}

def logout() {
    session.invalidate()
    redirect(action: "login")
}

}
所以我想做的是把authenticate()从这里拿出来,放到一个名为AuthenticateController()的新控制器中

只是,作为grails的新手,我的重定向不起作用,我希望有人能告诉我为什么

所以我想你会拿出

def authenticate {
/* some code*/
}
把它放在新的控制器里。那就用

redirect(controller: "authenticate", action: "authenticate")
但这不起作用,我得到一个错误异常

任何帮助都将不胜感激

编辑:为了下面的评论

class CustomerController {

/*Keeping the scaffold for admin purposes.*/   
static scaffold = Customer

//write redirects and make exceptions for scaffolds
//  def index() { }  

/*
 * Access controllers are ordered after application flow. 
 **/

def login(){  
    redirect(controller:"authenticate", action:"authenticate")
}

/*
 * Authentication based on email adress as the identifier.
 * 
 **/


def logout() {
    session.invalidate()
    redirect(action: "login")
}

}
然后是AuthenticateController

class AuthenticateController {

def authenticate() {
    def authPwd 
    def authUser

    if(User.findByEmail(params.email) == null){

      flash.message = "login failed"
      redirect(contoller:"customer", action: "login")

    }else{
        authUser = User.findByEmail(params.email)
        authPwd = authUser.getPassword()        

        if(authPwd == params.pwd){
            session["user"] = authUser
            session["customer"] = authUser.getCompany()

            println "current user is: " + session["user"]
            println "current customer is: " + session["customer"]

            redirect(controller: "portal", action: "start")
        }else{
            flash.message = "login failed"
            redirect(contoller:"customer", action: "login")
        }
    }
}
}
是不起作用的代码。基本上是复制粘贴

Tomcat运行,但首先出现100个错误

type Status report

message /ClipEdit_v1/authenticate/login

description The requested resource is not available.

我自己修的。只是将我的表单发布到身份验证控制器,如果失败,则重定向回登录

那么你已经发布了有效的代码,但没有发布不起作用的代码,或者发布了你收到的错误?好吧,我添加了它,讽刺没有帮助,但是你不使用Spring Security有什么原因吗?从您的示例中可以看出,您正在以纯文本形式存储密码。如果你想拥有一个安全的应用程序,你真的不应该自己做这件事。好吧,詹姆斯,这只是一个模型。我对整个圣杯都不熟悉,所以谢谢你的建议,我来看看。