0

我正在使用的应用程序有一个带有基于 JavaScript 的客户端的 Web 应用程序包,它向基于 CXF 的包发出 REST 调用。后者使用蓝图与服务层捆绑包暴露的服务挂钩。主 WAB 通过 Spring 的 DelegatingFilterProxy 使用 Spring Security。

目标是将基于 CXF 的捆绑包集成到安全折叠中。我们尝试了两种方法:将 CXF 包部署为 WAB(在其中注册 CXF servlet 以及 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 应用程序上下文?

谢谢,

迈克尔

4

1 回答 1

0

在这种情况下,您需要使用 spring-dm。你可能会绑定到 spring 的 2.5.x 版本。在你的战争中,你可能需要像 OsgiBundleXmlWebApplicationContext 这样的东西。

于 2013-03-19T14:36:14.387 回答