我想知道是否可以为特定包中的所有控制器重写URL。我需要将“admin”包中所有控制器的URL更改为“/ admin / $ controller”而不是“/ $ controller”,因此Spring Security可以保护它。非常感谢。
此致 Lojza
答案 0 :(得分:2)
所以今天我根据this article实施了解决方案:
// AppCtx - check the article above
for (controller in AppCtx.grailsApplication.controllerClasses) {
def cName = controller.logicalPropertyName
def packageName = controller.packageName
if (packageName.contains(".admin") || packageName.contains(".springsecurity")) {
"/admin/${cName}/$action?/$id?"(controller: cName) {
constraints {
}
}
} else {
"/${cName}/$action?/$id?"(controller: cName) {
constraints {
// apply constraints here
}
}
}
}
答案 1 :(得分:0)
这不是绝对必要的。您可以将@Secured注释添加到每个管理控制器:
@Secured(['ROLE_ADMIN'])
class AdminController1 { ... }
@Secured(['ROLE_ADMIN'])
class AdminController2 { ... }
或者如果您没有使用注释,您可以直接将每个管理控制器映射到Spring Security配置:
/adminController1/**=ROLE_ADMIN
/adminController2/**=ROLE_ADMIN
但是如果你真的想把所有这些控制器放在/ admin / URL前缀下,我想你可以通过添加一个手动引用每个管理控制器的映射来实现:
"/admin/adminController1/$action?/$id?"(controller: "adminController1")
"/admin/adminController2/$action?/$id?"(controller: "adminController2")
答案 2 :(得分:0)
查看:Best way to create an Admin section in Grails
但是在这种情况下,我总是建议将您的管理区域拆分为单独的grails-embedded-plugin。在这里,您可以使用自定义UrlMapping
- 类来完成您的魔法。这将使您的主要应用程序保持清洁。