2

我有控制器方法,它返回 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 登录的情况下处理这些请求。

4

2 回答 2

5

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

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

编辑................................................. .....................................

好的,那么您可能正在配置文件中使用 url 映射(Config.groovy 中的简单映射)。改变那里喜欢

grails.plugins.springsecurity.interceptUrlMap = [
    ...
    '/training/getJsonData/**': ['IS_AUTHENTICATED_ANONYMOUSLY'],
    ...
]
于 2013-09-16T11:45:18.633 回答
1

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

如果您使用默认配置:

grails.plugins.springsecurity.securityConfigType = "Annotation"

getJsonData您可以使用 Config.groovy 注释操作的方法@Secured('IS_AUTHENTICATED_ANONYMOUSLY')或将配置放入:

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'],
   // ...
]

查看Spring Security 插件文档中的相应部分

此外,请注意使用getFoo控制器中命名的方法,它们会在创建控制器时调用——这在 Grails wiki 的 Gotchas 页面中有记录。您可能应该重命名您的方法以避免任何问题。

于 2013-09-16T11:49:53.073 回答