Grails - 包中所有控制器的URL重写

时间:2012-04-12 18:24:09

标签: grails url-rewriting

我想知道是否可以为特定包中的所有控制器重写URL。我需要将“admin”包中所有控制器的URL更改为“/ admin / $ controller”而不是“/ $ controller”,因此Spring Security可以保护它。非常感谢。

此致 Lojza

3 个答案:

答案 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 - 类来完成您的魔法。这将使您的主要应用程序保持清洁。