My Grails应用程序提供了一个由Spring Security 2.0-RC4插件保护的REST API。其中一个操作不需要身份验证,看起来就是这样
@Secured(['permitAll'])
class PdfController {
static allowedMethods = [download: "POST"]
static responseFormats = ['pdf']
def download(String data) {
log.debug "Generating PDF from form data $data"
// impl omitted
}
}
当我通过grails run-app
或grails run-war
本地运行应用程序时,一切都按预期工作,即您可以在不进行身份验证的情况下调用此操作。但是,如果我使用grails -Dgrails.env=dev war
构建.war文件并将其部署到登台服务器上的Tomcat,我将无法再匿名调用此端点。
在登台服务器上,如果我尝试在未经过身份验证的情况下调用此操作,我会收到一个302(重定向)响应,将我重定向到登录页面。这是我期望的安全行动的行为。
我不确定这是否相关,但此操作与所有其他操作之间的一个区别是它是由表单帖子调用的,所以数据应该是x-www-form-urlencoded(所有其他通过AJAX调用操作并期望JSON数据。)
答案 0 :(得分:1)
它可能对环境设置很敏感 - -Dgrails.env=dev
选择名为“dev”的自定义环境,而不是名为“development”的标准环境。您可以使用简写
grails dev war
对于war
,默认环境是生产,但对于run-war
,它是开发。