2013-03-18 20 views
0

我正在使用的應用程序具有基於JavaScript的客戶端的Web應用程序包,該客戶端向基於CXF的包發出REST調用。後者使用藍圖來連接服務層包所提供的服務。主要的WAB通過Spring的DelegatingFilterProxy使用Spring Security。將Spring Security與在Karaf中運行的CXF OSGI綁定集成在一起

目標是將基於CXF的軟件包插入到安全摺疊中。我們嘗試了兩種方法:將CXF bundle部署爲WAB(在其中註冊CXF servlet以及Spring過濾器)。問題在於解析將這個bundle連接到服務層的藍圖文件。具體的錯誤表明無法找到藍圖的命名空間處理程序。

最新的方法是使用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

你需要使用Spring-DM在這種情況下。你可能會被綁定到Spring的2.5.x版本。 你可能在你的戰爭中需要像OsgiBundleXmlWebApplicationContext這樣的東西。

+0

我們正在嘗試您的建議。然而,我們遇到了OsgiBundleXmlWebApplicationContext類的問題,爲此我們使用了一個醜陋的黑客。沒有它,我們會收到一個錯誤「應該在刷新應用程序上下文之前設置bundle上下文」。在上面的類中,調用servletContext.getAttribute(BUNDLE_CONTEXT_ATTRIBUTE)返回null。調用時的BUNDLE_CONTEXT_ATTRIBUTE可用於servlet上下文的外部類(我相信這些類來自Jetty)。 hack使用反射來提取bundle上下文。你遇到過這樣的問題嗎? – 2013-03-22 21:28:28

+0

不,至少我不記得看到這樣的問題。 看看https://ops4j1.jira.com/browse/PAXWEB-488,也許這給你一些指針... – 2013-03-22 23:01:52