我认为我的问题的简短通用形式可能是最好的:如何让 Grails/Spring “看到”依赖库组件,包括不是 Grails 控制器的过滤器和 servlet?
具体如下: 我想在我的 Grails (v2.4.4) 应用程序中使用 Togglz 功能切换库 (v2.0.1)。Togglz 带有自己的 Web 控制台 servlet 和 TogglzFilter 类,该类在启动时进行一些初始化并设置每个请求的状态。在 vanilla spring web 应用程序中,这两者通常都由注释连接,因此 url 路径[context-root]/togglz/index
调用控制台。(服务器是 Pivotal tc/tomcat 7,我相信它满足 Servlet 3.0 对注释驱动配置工作的要求。)我的问题是,如何将这样的东西连接到我的 Grails 应用程序中?
我对 Grails 和 Togglz 都是新手,所以我可能遗漏了一些愚蠢的东西。我尝试过的所有事情都会在控制台 URL 上产生 404。到目前为止,我有:
- 在 BuildConfig.groovy 中添加了 togglz 核心、servlet、控制台和 spring 依赖项。
- 添加了 org.togglz 和我将 Togglz 配置(接下来的两项)放入 Config.groovy 中 grails.spring.bean.packages 的值的包。
- 创建了 FeatureTogglz 和 FeatureTogglzConfig 类,都用 @Component 注释。
看起来它应该这样做,但是当它没有时,我尝试了更多的东西:
- 搜索 Grails、Togglz、Library、Servlet、Filter 等的各种组合产生了两个未遂事件:
尝试使用控制台 servlet 类作为目标的 UrlMappings.groovy 条目:
"/togglz/index"(org.togglz.console.TogglzConsoleServlet)`.
我没有看到任何这样的例子;我只是想猜测什么可能会完成 web.xml 中的其他内容。
考虑到问题可能是 Grails 没有设置 Togglz 过滤器,除了为每个请求设置上下文之外,它在启动时进行了一些初始化,我创建了 conf/TogglzFilters.groovy,再次猜测内容:
import org.togglz.servlet.TogglzFilter public class TogglzFilters { def filters = { togglzFilter(controller:'*', action:'*') { before = { new TogglzFilter().doFilter(request, response, null) } } } }
甚至在它指向零之前,这感觉完全错误,因为我想要让 Grails 使用提供的过滤器,而不是自己编写代码。但是我能找到的所有过滤器示例都使用了内联代码。
正如我所说,这对我来说很多都是新的,所以如果我错过了我应该研究的东西,我会很感激一个指针和一个直接的答案。
谢谢。