Обеспечение безопасности отдыха CXF с Широ на Apache Караф - PullRequest
0 голосов
/ 22 февраля 2020

Я пытаюсь защитить Apache службы отдыха на основе CXF (Apache CXF 3.3.5) с помощью Apache Shiro Basi c Аутентификация (Apache Shiro 1.5.0) в Apache Karaf 4.2 +0,8. Однако в конечном итоге я получаю предупреждающее сообщение в файле журнала karaf, например:

ServletController | 394 - org.apache.cxf.cxf-rt-transports-http - 3.3.5 | Can't find the request for http://localhost:8181/myweb/rest-api/user's Observer

Никаких других исключений в другом месте или во время установки WAB. WAB прекрасно выглядит в веб-консоли с активным состоянием, однако эта конечная точка службы вообще не работает, создавая только вышеупомянутую запись в журнале.

Я пытаюсь создать новый HttpContext с этим WAB, чтобы сделать убедитесь, что Apache базовая c аутентификация Широ не мешает аутентификации Apache Karaf Webconsole (как предлагается здесь: http://karaf.922171.n3.nabble.com/Apache-Shiro-in-Karaf-td4048566.html). Я также не хочу использовать стандартный контекст CXF, предоставляемый функцией CXF в Karaf.

Мой веб. xml:

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <listener>
        <listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class>
    </listener>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/beans.xml</param-value>
    </context-param>
    <filter>
        <filter-name>ShiroFilter</filter-name>
        <filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>ShiroFilter</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
        <dispatcher>INCLUDE</dispatcher>
        <dispatcher>ERROR</dispatcher>
    </filter-mapping>
    <servlet>
        <servlet-name>CXFServlet</servlet-name>
        <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
        <init-param>
            <param-name>config-location</param-name>
            <param-value>classpath:META-INF/cxf/cxf-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>CXFServlet</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

Мои бины. xml:

    <import resource="classpath:META-INF/cxf/cxf.xml" />
    <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />

    <context:annotation-config />

    <!-- scans and register beans using annotation-config (metadata) -->
    <context:component-scan base-package="org.adams.karaf.service" />

    <!-- to support Java-to-JSON and vice-versa conversion -->
    <bean id="jsonProvider" class="com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider" />

    <!-- to support Java-to-XML and vice-versa conversion -->
    <bean id="jaxbXmlProvider" class="org.eclipse.persistence.jaxb.JAXBContextFactory" />


    <bean id="userRestServiceImplClass" class="org.adams.karaf.service.impl.UserRestServiceImpl" />

    <jaxrs:server id="restservice" address="/rest-api">
        <jaxrs:serviceBeans>
            <ref bean="userRestServiceImplClass" />
        </jaxrs:serviceBeans>
        <jaxrs:extensionMappings>
            <entry key="json" value="application/json" /> 
            <entry key="xml" value="application/xml" />         
        </jaxrs:extensionMappings>

        <jaxrs:providers>
            <ref bean="jsonProvider" />
            <ref bean="jaxbXmlProvider" />
        </jaxrs:providers>
    </jaxrs:server>

Мои вопросы сейчас:

  • Как я могу создать новую службу отдыха CXF в Karaf под новым HttpContext (WebContext), чтобы избежать вмешательства в Apache веб-консоль Karaf?
  • Чего-то не хватает в моих конфигурациях?
  • Сообщает ли кто-нибудь что-то в журнале?

Вы также можете взглянуть на https://github.com/Thomas-Adams/cxf-rest-service за завершенный проект.

...