【问题标题】:Grails action is secured when I use run-app but not when .war is deployed当我使用 run-app 但部署 .war 时,Grails 操作是安全的
【发布时间】: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-app 或 grails run-war 在本地运行应用程序时,一切都按预期工作,即您可以在不进行身份验证的情况下调用此操作。但是,如果我使用 grails -Dgrails.env=dev war 构建一个 .war 文件并将其部署到临时服务器上的 Tomcat,我将无法再匿名调用此端点。

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

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

【问题讨论】:

    标签: tomcat grails spring-security war


    【解决方案1】:

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

    grails dev war
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-22
      • 2011-10-10
      • 2010-11-08
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多