我有控制器方法,它返回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登录的情况下提供这些请求。
答案 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。您应该重命名您的方法以避免任何问题。