当我使用 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-app
或 grails 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 4、Ubuntu 20、嵌入式 Tomcat - 请求中没有多部分文件
在apache tomcat上部署war文件时未加载CSS和JS文件
使用 Elastic Beanstalk 时保留 WAR 名称
将war部署到weblogic版本(weblogic 12.2.1.3)时,Spring Integration应用程序部署失败