Grails:公开LoginController以进行编程登录

时间:2014-04-15 17:49:01

标签: web-services rest grails groovy

所以我正在研究Grails / Flex玩具项目。我有一个控制器(LoginController),我用来在我的Flex应用程序上执行后端身份验证。但是,我无法“找到”我的控制器。我的意思是我在尝试访问

时收到HTTP状态404错误
http://localhost:8080/OrlandoGrails/LoginController/login.json

这是我悲伤,悲伤的小控制器,因为它处于概念验证状态。

package orlandograils
class LoginController {

    static allowedMethods = [login: "POST", login: "GET"]

    def login(String username, String password )
    {
        return "Hello"
    }
}

我已经看过有关RESTful服务的文档,但它们似乎总是涉及我没有的域对象。无论如何,我还将此添加到我的UrlMappings.groovy文件

"/LoginController/login.json"(resource:"LoginController")

对于我正在做的可怕错误的任何帮助将不胜感激。另外,有没有办法列出像RoR或Symfony2一样的Grails路线?

此外,虽然我的大部分服务都是通过amf频道进行的,但我的身份验证是通过http进行的。

3 个答案:

答案 0 :(得分:2)

关于获取路线列表(例如网址映射),您可以运行grails url-mappings-report

另请注意将url-mapping修改为:

"/LoginController/login.json"(controller: "login", action: "login")

如果使用resource,则必须显示,创建,更新和删除默认操作方法

//Using resource: would look for a show() action method for a GET 
//request which you don't have in your case. And, note name of controller used 
//is login instead of LoginController
"/LoginController/login.json"(resource: "login")

就404而言,它正在寻找一个名为" hello.gsp"的相应视图。如果要渲染文本,请使用:

render text: 'hello'

答案 1 :(得分:2)

您要完成的目标并不完全清楚,但您的示例的一个问题是,在您的URL映射中,您指定控制器的名称作为您的资源,这没有意义。这可能是域类,但不是控制器。

如果你想做的只是将网址映射到控制器中的特定操作,你可以在UrlMappings.groovy中执行类似的操作......

"/LoginController/login.json"(controller: 'login', action: 'login')

通常你不会在网址中有“控制器”,所以这样的事情会更常见......

"/login/login.json"(controller: 'login', action: 'login')

从小代码片段中还不清楚您希望JSON扮演什么角色。也许你只是想要这样的东西......

"/login"(controller: 'login', action: 'login')

如果你能进一步描述你想要完成的事情,我可以澄清一下。

答案 2 :(得分:1)

原帖包括:

package orlandograils
class LoginController {

    static allowedMethods = [login: "POST", login: "GET"]

    def login(String username, String password )
    {
        return "Hello"
    }
}

allowedMethods属性存在伪造。地图中的键必须是唯一的。该代码尝试将密钥登录在Map中两次。如果意图是可以通过POST或GET访问登录方法,那么这是有道理的......

static allowedMethods = [login: ['POST', 'GET']]

编写的代码是有效的,但它不会执行它可能要执行的操作。该Map将评估为只有1个与登录密钥相关联的值。这与Grails没有任何关系,这只是标准的Map行为。

$ groovysh
Groovy Shell (2.1.9, JVM: 1.7.0_45)
Type 'help' or '\h' for help.
-------------------------------------------------------------------------------
groovy:000> [login: 'GET', login: 'POST']
===> {login=POST}
groovy:000> 

请注意,表达式求值为一个Map,其值为“POST”,与登录密钥相关联。