Я пытаюсь защитить 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 за завершенный проект.