我正在使用grails来构建主要用作服务框架的应用程序。我的问题是:服务能否以与 Controller 相同的方式得到保护?
基于uri的示例:
class SecurityFilters {
def filters = {
all(uri: "/**") {
before = {
// Ignore direct views (e.g. the default main index page).
if (!controllerName) return true
// Access control by convention.
accessControl()
}
}
}
}
最佳答案
我不知道Shiro插件是否支持此功能,但Acegi plugin可以支持,尽管是以“实验”方式(无论如何)。
更新
正确阅读问题后,您似乎在询问是否可以使用过滤器来保护服务。如果是这种情况,那么Shiro就显得无关紧要,因为执行授权的是筛选器,而不是Shiro。
因此,要回答有关是否可以使用过滤器保护服务安全的问题,答案是否定的,因为您只能从过滤器内部访问 Controller 。但是,您可以使用Groovy元编程对服务进行AOP风格的方法拦截。
基本方法是:
invokeMethod
属性添加到MetaClass 除了
如果可能的话,我强烈建议您使用经过验证的安全性插件(例如Shiro,Acegi)执行授权检查,而不要按照上述方式自行滚动。
关于grails - 使用Shiro确保Grails中的服务安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2191615/