В приложении, с которым я работаю, есть пакет веб-приложений с клиентом на основе JavaScript, который выдает запросы REST на пакет CXF. Последний использует схему, чтобы подключиться к сервисам, предоставляемым пакетами уровня обслуживания. Основной WAB использует Spring Security через Spring DelegatingFilterProxy.Интеграция Spring Security с пакетом OSGI CXF, работающим в Karaf
Цель состоит в том, чтобы связать пакет на основе CXF с защитной складкой. Мы пробовали два подхода: развертывание пакета CXF как WAB (регистрация сервлета CXF в нем вместе с фильтром Spring). Проблема заключалась в разборе файла чертежа, который соединяет этот пакет с уровнем обслуживания. Конкретная ошибка указала, что обработчик пространства имен для чертежа не найден.
Последний подход заключается в использовании файла blueprint.xml для развертывания CXFNonSpringServlet, а также для регистрации фильтра DelegatingFilterProxy. Соответствующий раздел blupring.xml:
<service interface="javax.servlet.Servlet">
<service-properties>
<entry key="servlet-name" value="ozpCXFServlet"/>
<entry key="alias" value="/ozp/rest" />
</service-properties>
<bean class="org.apache.cxf.transport.servlet.CXFNonSpringServlet">
<property name="bus" ref="cxfBus"/>
</bean>
</service>
<service interface="javax.servlet.Filter">
<service-properties>
<entry key="filter-name" value="springSecurityFilterChain"/>
<entry key="servletNames">
<array value-type="java.lang.String">
<value>ozpCXFServlet</value>
</array>
</entry>
<entry key="urlPatterns">
<array value-type="java.lang.String">
<value>/ozp/rest</value>
</array>
</entry>
</service-properties>
<bean class="org.springframework.web.filter.DelegatingFilterProxy" />
</service>
Эта часть работает, и фильтр интегрируется в HTTP-запрос. Ошибка, которую я получаю:
java.lang.IllegalStateException: No WebApplicationContext found: no ContextLoaderListener registered?
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:159)
Как избежать этой ошибки? Как обеспечить создание контекста приложения Spring?
Спасибо,
Майкл
Мы стараемся, что вы предложили. Однако мы столкнулись с проблемой с классом OsgiBundleXmlWebApplicationContext, для которого мы используем уродливый взлом. Без него мы получаем ошибку «контекст пакета должен быть установлен до обновления контекста приложения». В вышеприведенном классе вызов servletContext.getAttribute (BUNDLE_CONTEXT_ATTRIBUTE) возвращает значение null. BUNDLE_CONTEXT_ATTRIBUTE во время вызова доступен во внешнем классе контекста сервлета (я считаю, что классы взяты из Jetty). Хак использует отражение, чтобы извлечь контекст связки. Вы столкнулись с такой проблемой? –
Нет, по крайней мере, я не могу вспомнить, что видел такую проблему. Взгляните на https://ops4j1.jira.com/browse/PAXWEB-488, возможно, это дает вам несколько указателей ... –