Доступ к ChannelInfo и ResourceBundle из ServletFilter в HippoCMS
Я поместил все свойства и конфигурацию моего приложения в пакет ресурсов бегемота и (в зависимости от канала) в настройки канала (ChannelInfo).
Есть ли какой-нибудь способ получить доступ к конфигурации канала и комплектам ресурсов гиппопотама из ServletFilter?
Я использую SpringSecurityFilter, и мне нужен доступ к этим элементам конфигурации.
С уважением
РЕДАКТИРОВАТЬ В HsTDelegateeFilterBean#doFilter текущий hstRequestContext помещается в ServletRequest (как атрибут), но, к сожалению, он удаляется после выполнения метода doFilter.
1 ответ
Вы можете скопировать некоторый код из ResourceBundleUtils.java [1]. Например,
ResourceBundleRegistry resourceBundleRegistry = HstServices.getComponentManager().getComponent(ResourceBundleRegistry.class.getName());
String basename = "com.example.Messages";
ResourceBundle bundle = resourceBundleRegistry.getBundle(basename));
Это будет достаточно для вашего случая использования, если вы хотите получить его в фильтрах Spring Security. Вы получаете доступ к одноэлементному компоненту контейнера HST прямо выше.
Я думаю, что ваш последний вопрос - другая тема, но жизненный цикл экземпляра HstRequestContext в основном находится в области запроса. Таким образом, вы не сможете сохранить его для дальнейшего использования. Кроме того, фильтр Spring Security должен находиться перед HstFitler. Это означает, что вы все равно не сможете получить доступ к экземпляру HstRequestContext, потому что он создан HstFilter. Если вы хотите иметь сервлет или фильтр сервлетов для получения доступа к HstRequestContext после HstFilter в других случаях использования, вы можете обратиться к [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