如何绕过Spring安全登录检查grails

时间:2013-09-16 11:40:05

标签: php ajax grails spring-security grails-2.0.4

我有控制器方法,它返回json数据并且没有安全检查逻辑。

def getJsonData(){
 // return json

}

我正在从另一台服务器(跨域)的php页面执行ajax请求。

      $.ajax({
             type: "GET",
             url: "http://localhost:8080/training/getJsonData",
             data: { ListID: '1'},
              dataType: "jsonp",
              success: function(data) {
               alert('Hi'+data);
                $("#success").html(data);

            }
         });

数据不是来自服务器,只有在用户登录到应用服务器时才有效。如何在不检查grails登录的情况下提供这些请求。

2 个答案:

答案 0 :(得分:5)

在您的Grails操作上方添加IS_AUTHENTICATED_ANONYMOUSLY,例如

@Secured('IS_AUTHENTICATED_ANONYMOUSLY')
def getJsonData() {
    ....
}

修改........................................... ........................................

好的可能是你在配置文件(Simple Map in Config.groovy)中使用url映射。 改变就好了

grails.plugins.springsecurity.interceptUrlMap = [
    ...
    '/training/getJsonData/**': ['IS_AUTHENTICATED_ANONYMOUSLY'],
    ...
]

答案 1 :(得分:1)

这取决于您的应用程序如何使用Spring Security进行配置。

如果您使用默认配置:

grails.plugins.springsecurity.securityConfigType = "Annotation"

您可以使用getJsonData为操作@Secured('IS_AUTHENTICATED_ANONYMOUSLY')注释方法,也可以在Config.groovy中添加配置:

grails.plugins.springsecurity.controllerAnnotations.staticRules = [
   '/training/getJsonData/**': ['IS_AUTHENTICATED_ANONYMOUSLY'],
]

否则,如果您使用的是InterceptUrlMap:

grails.plugins.springsecurity.securityConfigType = "InterceptUrlMap"

您应该在interceptUrlMap中配置一个像

这样的条目
grails.plugins.springsecurity.interceptUrlMap = [
   '/training/getJsonData/**':    ['IS_AUTHENTICATED_ANONYMOUSLY'],
   // ...
]

查看the appropriated section in the Spring Security plugin documentation

另外,请注意在控制器中使用名为getFoo的方法,在创建控制器时调用它们 - 这是documented in the Gotchas page at Grails wiki。您应该重命名您的方法以避免任何问题。