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

Posted

技术标签:

【中文标题】当我使用 run-app 但部署 .war 时,Grails 操作是安全的【英文标题】:Grails action is secured when I use run-app but not when .war is deployed 【发布时间】:2015-09-04 10:34:30 【问题描述】:

我的 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】:

这可能对环境设置很敏感——-Dgrails.env=dev 选择了一个名为“dev”的自定义环境,而不是名为“development”的标准环境。您可以使用简写方式构建“开发”环境 WAR 文件

grails dev war

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

【讨论】:

以上是关于当我使用 run-app 但部署 .war 时,Grails 操作是安全的的主要内容,如果未能解决你的问题,请参考以下文章

在 Grails 中制作 WAR 文件

从 run-app 配置 Grails 访问日志

Grails 4、Ubuntu 20、嵌入式 Tomcat - 请求中没有多部分文件

在apache tomcat上部署war文件时未加载CSS和JS文件

使用 Elastic Beanstalk 时保留 WAR 名称

将war部署到weblogic版本(weblogic 12.2.1.3)时,Spring Integration应用程序部署失败