当我使用run-app时,Grails操作是安全的,但是在部署.war时则不安全

时间:2015-06-18 16:49:46

标签: tomcat grails spring-security war

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-appgrails run-war本地运行应用程序时,一切都按预期工作,即您可以在不进行身份验证的情况下调用此操作。但是,如果我使用grails -Dgrails.env=dev war构建.war文件并将其部署到登台服务器上的Tomcat,我将无法再匿名调用此端点。

在登台服务器上,如果我尝试在未经过身份验证的情况下调用此操作,我会收到一个302(重定向)响应,将我重定向到登录页面。这是我期望的安全行动的行为。

我不确定这是否相关,但此操作与所有其他操作之间的一个区别是它是由表单帖子调用的,所以数据应该是x-www-form-urlencoded(所有其他通过AJAX调用操作并期望JSON数据。)

1 个答案:

答案 0 :(得分:1)

它可能对环境设置很敏感 - -Dgrails.env=dev选择名为“dev”的自定义环境,而不是名为“development”的标准环境。您可以使用简写

构建“开发”环境WAR文件
grails dev war

对于war,默认环境是生产,但对于run-war,它是开发。