我对Spring相对较新,但对Spring Security和Grails来说却是新手。简而言之,我知道它建议不允许.jsp文件可以使用,你应该将它们放在WEB-INF中,并设置你的控制器以将它们从正确的地方拉出来。
我将如何在Grails中执行此操作?似乎我会通过将gsp放入WEB-INF然后将逻辑编写到我的所有控制器中来破坏“约定优于配置”的想法(如果这甚至可以立即实现......)似乎我将不得不改变一些基本的Grails配置
有什么想法吗?
答案 0 :(得分:2)
对早期帖子的轻微修正:
坚持Grails中的惯例并不能阻止某人猜测gsp生活在哪里直接击中它(我只是尝试过,它有效)。
答案 1 :(得分:2)
好的,我在这里(或其他一个StackOverflow)没有看到完整的答案提供完整的有效结果,所以这就是我提出的:
首先,创建一个新的控制器:
grails create-controller gspForbidden
打开它,并将其添加到索引操作:
index = {
response.status = 404
}
然后,打开grails-app/conf/UrlMappings.groovy
并在static mappings
闭包下添加:
"/grails-app/**.gsp"(controller:"gspForbidden")
这将重定向任何尝试直接向gspForbidden
控制器查看GSP。反过来,该控制器只是呈现404 - 未找到文件的响应。关于这一点最好的事情是它完全被隐藏 - 没有任何东西表明GS路径是正确的,因此暴露应用程序设计的重要内容的可能性较小。
我反复试图弄清楚如何使用UrlMappings
显示没有控制器的404,但我没有成功。如果您能想到办法,请告诉我。我宁愿在没有任何明确的控制器的情况下实现这一点。
答案 2 :(得分:1)
来自Spring Security Plugin文档:
package com.testapp
import grails.plugins.springsecurity.Secured
class SecureController {
@Secured(['ROLE_ADMIN'])
def index = {
render 'Secure access only'
}
}
您可以保护您的GSP页面,如上例所示。如果用户具有管理员权限,则安全注释将仅向用户提供访问权限。
有关更多信息,请参阅:
http://grails-plugins.github.com/grails-spring-security-core/docs/manual/
教程很好,作为一个开始。
答案 3 :(得分:0)
你实际上不需要在Grails中担心这一点。如果您遵循使用视图和控制器的约定,它将处理有关确保无法直接访问GSP页面的所有详细信息。
就与Spring Security的集成而言,如果您遵循推荐的模式之一(控制器中的URL安全性或注释),您应该没问题。