有人可以建议一个可行的解决方案来阻止直接访问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过滤器部分。
有什么想法?
非常感谢! 汤姆
答案 0 :(得分:1)
遗憾的是,我没有找到UrlMappings的解决方案。 这是一个有点难看的解决方案,但如果你在所有页面上使用相同的布局(例如main.gsp),你可以将这些行添加到布局(main.gsp)。
<% if (request.requestURL.toString().endsWith(".gsp")) {
response.sendRedirect("${request.contextPath}/")
} %>
这样,如果用户试图直接访问gsp页面,他就会被重定向到主页。
可能不是最好的解决方案,但到目前为止对我有用。
欢呼狡猾
答案 1 :(得分:1)
将这些添加到UrlMappings:
"/**.gsp" {
controller = {
if(request.requestURL.toString().endsWith(".gsp")) {
"forbidden"
} else params.controller
}
}
创建一个ForbiddenController和一个index.gsp,“永远不要想到直接访问GSP。”作为其内容。
干杯。
答案 2 :(得分:0)
根据grails FAQ,UrlMapping.groovy中的“/** .gsp”配置应该有效。
还没试过。
您是如何将链接添加到页面的? 使用链接标记时链接是否也会中断?
<g:link controller="book" action="list">Book List</g:link>
答案 3 :(得分:0)
如何编写将在每个请求上执行的过滤器?