从 HippoCMS 中的 ServletFilter 访问 ChannelInfo 和 ResourceBundle

Accessing ChannelInfo and ResourceBundle from ServletFilter in HippoCMS

我将所有应用程序属性和配置放入河马资源包中,并(基于频道)放入频道设置 (ChannelInfo)。

有没有办法从 ServletFilter 访问通道配置和 hippo 资源包?

我正在使用 SpringSecurityFilter,我需要访问这些配置项。

此致

编辑 在 HsTDelegateeFilterBean#doFilter 中,当前的 hstRequestContext 被放入 ServletRequest(作为属性),但不幸的是,它在执行 doFilter 方法后被删除。

您可以从 ResourceBundleUtils.java [1] 复制一些代码。 例如,

ResourceBundleRegistry resourceBundleRegistry = HstServices.getComponentManager().getComponent(ResourceBundleRegistry.class.getName());
String basename = "com.example.Messages";
ResourceBundle bundle = resourceBundleRegistry.getBundle(basename));

如果您想在 Spring 安全过滤器中获取它,这对您的用例来说已经足够好了。您正在直接访问上面的 HST 容器的单例组件。

我认为你最后一个问题是另外一个话题,但是 HstRequestContext 实例的生命周期基本上是在请求范围内。因此,您将无法存储它供以后使用。此外,Spring 安全过滤器应该位于 HstFitler 之前。这意味着您无论如何都无法访问 HstRequestContext 实例,因为它是由 HstFilter 创建的。如果您希望在其他用例中使用 servlet 或 servlet 过滤器在 HstFilter 之后访问 HstRequestContext,您可能需要查看 [2].

[1] http://svn.onehippo.org/repos/hippo/hippo-cms7/site-toolkit/trunk/commons/src/main/java/org/hippoecm/hst/resourcebundle/ResourceBundleUtils.java [2] http://www.onehippo.org/library/concepts/integration/hst-container-integration-with-other-web-application-frameworks.html