【发布时间】:2023-03-09 00:26:01
【问题描述】:
谁能建议一个可行的解决方案来防止直接访问 Grails 上的 *.gsp 页面?
查看拦截'/**.gsp'后,我发现无法使用它,因为它不仅会过滤掉直接访问,还会过滤掉来自控制器的页面渲染等。
我尝试在 UrlMapping.groovy 中设置以下内容,即使我可以阻止 *.gsp 直接访问,但我也弄乱了页面的导航;然后所有链接似乎都转到主页。
"/**.gsp" {
isEligible = {
System.err.println("ALL PARAMS: " + params)
request.requestURL.toString().endsWith(".gsp")
}
controller = {
if (request.requestURL.toString().endsWith(".gsp")) {
"public"
} else {
"*"
}
}
action = {
if (request.requestURL.toString().endsWith(".gsp")) {
"home"
} else {
"*"
}
}
}
曾经我想过像 org.springframework.web.filter.OncePerRequestFilter 这样的设置过滤器,但不太确定如何定义它,可能因为 Grails 倾向于自行生成 web.xml 过滤器部分。
有什么想法吗?
非常感谢! 汤姆
【问题讨论】:
-
只是想一想,您是否进行了测试以确认您可以在测试和生产环境中直接访问它?我感觉 Grails 可能仅在您的环境设置为开发时才允许直接访问。
-
非常有趣的问题。我从来没有注意到它,但即使在生产中也会发生在我身上。虽然页面会非常喜欢返回错误,因为它没有来自控制器的信息。
-
我刚刚在生产模式下运行完,同样的问题;无论如何,谢谢你的提示!我只是想知道如何在我的示例代码中设置某些代理项以防止匹配那些非直接访问;你看,我试过'isEligible',但它不起作用。
标签: grails gsp url-mapping