2011-10-23 64 views
0

我試圖在使用Apache CXF版本2.2.12編寫的Web服務添加基於用戶名令牌的安全性。WS-Security是不CXF工作 - 端點地址

一旦我部署我在WebLogic應用程序,我獲得兩個網址從中我可以訪問我的WSDL。

  1. http://localhst:8080/myapp/services/MyService?wsdl
  2. http://localhost:8080/myapp/MyService?wsdl

我試圖用soapUI的客戶端和問題是,如果我用第二個URL消費web服務,一切工作正常,我的EJB是得到正確注射等,但WSS4JInterceptor不一直打來電話。

如果我更改了soapUI的URL中使用第一個1,那麼攔截器獲取調用但後來我的服務是沒有得到注入和我得到NULL作爲服務對象。

我在Spring配置文件配置WSS4JInterceptor。我需要在每個請求之前調用此攔截器,以便我可以從請求頭驗證用戶令牌。

這裏是我的beans.xml

<bean id="wss4jInConfiguration" class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor"> 
<property name="properties"> 
<map> 
    <entry key="action" value="UsernameToken Timestamp"/> 
    <entry key="passwordType" value="PasswordText" /> 
    <entry> 
     <key> 
     <value>passwordCallbackRef</value> 
     </key> 
     <ref bean="passwordCallback"/> 
    </entry> 
</map> 
</property> 
</bean> 

<bean id="passwordCallback" class="my.interceptors.callbacks.handlers.PasswordCallbackHandler"/> 

<jaxws:endpoint id="myservice" implementor="my.sample.application.MyServiceImpl" 
address="/MyService"> 
    <jaxws:ininterceptors> 
     <ref bean="wss4jInConfiguration" /> 
    </jaxws:ininterceptors> 
</jaxws:endpoint> 

這裏是我的web.xml

<?xml version="1.0" encoding="ISO-8859-1"?> 
<!DOCTYPE web-app 
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
"http://java.sun.com/dtd/web-app_2_3.dtd"> 

<web-app> 
    <context-param> 
<param-name>contextConfigLocation</param-name> 
<param-value> 
    classpath:WEB-INF/beans.xml 
</param-value> 
    </context-param> 

    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener 
     </listener-class> 
    </listener> 

    <servlet> 
     <servlet-name>CXFServlet</servlet-name> 
     <display-name>CXF Servlet</display-name> 
     <servlet-class>org.apache.cxf.transport.servlet.CXFServlet 
     </servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>CXFServlet</servlet-name> 
     <url-pattern>/services/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

我沒有當前訪問我的WSDL,但這裏是標籤的樣子。

<soap:address location="http://localhost:8080/MyServiceSoapPort" /> 

任何指針我做錯了什麼。

注:我的服務而無需呼叫URL通過工作正常不回/服務/

回答

0

我的猜測是,Web服務實際部署兩次,一次通過CXF在你的beans.xml文件中配置一次Weblogic作爲Java EE 5 Web服務。 CXF不執行注射(我假設你正在使用@EJB)和WebLogic不知道你的WS-Security配置任何東西。