2013-03-18 5 views
0

В приложении, с которым я работаю, есть пакет веб-приложений с клиентом на основе 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?

Спасибо,

Майкл

ответ

0

Вы должны использовать родниковую-дм в этом случае. Вероятно, вы связаны с весной версии 2.5.x. Возможно, в вашей войне есть что-то вроде OsgiBundleXmlWebApplicationContext.

+0

Мы стараемся, что вы предложили. Однако мы столкнулись с проблемой с классом OsgiBundleXmlWebApplicationContext, для которого мы используем уродливый взлом. Без него мы получаем ошибку «контекст пакета должен быть установлен до обновления контекста приложения». В вышеприведенном классе вызов servletContext.getAttribute (BUNDLE_CONTEXT_ATTRIBUTE) возвращает значение null. BUNDLE_CONTEXT_ATTRIBUTE во время вызова доступен во внешнем классе контекста сервлета (я считаю, что классы взяты из Jetty). Хак использует отражение, чтобы извлечь контекст связки. Вы столкнулись с такой проблемой? –

+0

Нет, по крайней мере, я не могу вспомнить, что видел такую ​​проблему. Взгляните на https://ops4j1.jira.com/browse/PAXWEB-488, возможно, это дает вам несколько указателей ... –