cxf webservice身份驗證

1:spring服務端的配置

Java代碼  收藏代碼
  1.  <bean id="Customer" class="org.web.HelloServiceImpl"></bean>  
  2. <jaxws:endpoint  id="custom"  implementor="#Customer"   address="/web" >  
  3.      <jaxws:inInterceptors>    
  4.            <bean class="org.apache.cxf.interceptor.LoggingInInterceptor" />    
  5.            <bean class="org.apache.cxf.binding.soap.saaj.SAAJInInterceptor" />    
  6.            <bean class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">    
  7.                <constructor-arg>    
  8.                    <map>    
  9.                        <entry key="action" value="UsernameToken" />    
  10.                        <entry key="passwordType"    
  11.                            value="PasswordText" />    
  12.                        <entry key="user" value="cxfServer" />    
  13.                        <entry key="passwordCallbackRef">    
  14.                            <ref bean="serverPasswordCallback" />    
  15.                        </entry>    
  16.                    </map>    
  17.                </constructor-arg>    
  18.            </bean>    
  19.        </jaxws:inInterceptors>    
  20.     
  21.  </jaxws:endpoint>  
  22. <bean id="serverPasswordCallback"  class="org.web.ServerPasswordCallback" />    

 

action:UsernameToken 是使用用戶令牌

passwordType:PasswordText 是指密碼加密策略.這裏是直接密碼文本.

user:cxfServer 是指別名

passwordCallbackRef:serverPasswordCallback 是這密碼驗證..類..就是下面配置的..

2: 類:serverPasswordCallback

 

Java代碼  收藏代碼
  1. import javax.security.auth.callback.Callback;  
  2. import javax.security.auth.callback.CallbackHandler;  
  3. import javax.security.auth.callback.UnsupportedCallbackException;   
  4. import org.apache.ws.security.WSPasswordCallback;  
  5.   
  6.   
  7. public class ServerPasswordCallback implements CallbackHandler {  
  8.   
  9.     public void handle(Callback[] callbacks) throws IOException,  
  10.             UnsupportedCallbackException {  
  11.         WSPasswordCallback  pc=(WSPasswordCallback) callbacks[0];  
  12.         String pw=pc.getPassword();  
  13.         String idf=pc.getIdentifier();  
  14.         System.out.println("密碼是:"+pw);  
  15.         System.out.println("類型是:"+idf);  
  16.         if(pw.equals("wdwsb")&&idf.equals("admin")){  
  17.             System.out.println("成功");  
  18.         }  
  19.         else{  
  20.             throw new SecurityException("驗證失敗");  
  21.         }  
  22.     }  

  這個不用多說..就是密碼驗證..很簡單!!

3:spring客戶端的配置:

 

Java代碼  收藏代碼
  1. <bean id="webTest" class="org.web.HelloService" factory-bean="client" factory-method="create"/>  
  2.      <bean id="client" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean" >  
  3.             <property name="address" value="http://127.0.0.1:88/Hello/web/web"></property>  
  4.             <property name="serviceClass" value="org.web.HelloService"></property>  
  5.             <property name="outInterceptors">  
  6.                 <list>  
  7.                     <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor" />    
  8.                     <bean class="org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor" />    
  9.                     <bean class="org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor">    
  10.                         <constructor-arg>    
  11.                             <map>    
  12.                                 <entry key="action" value="UsernameToken" />    
  13.                                 <entry key="passwordType"    
  14.                                     value="PasswordText" />    
  15.                                 <entry key="user" value="cxfClient" />    
  16.                                 <entry key="passwordCallbackRef">    
  17.                                     <ref bean="clientPasswordCallback" />    
  18.                                 </entry>    
  19.                             </map>    
  20.                         </constructor-arg>    
  21.                     </bean>    
  22.                 </list>  
  23.         </property>  
  24.      </bean>  
  25.      <bean id="clientPasswordCallback" class="org.web.clientPasswordCallback"></bean>  

跟server的配置差不多..沒多少要講的.呵呵...

4: 類clientPasswordCallback的配置

Java代碼  收藏代碼
  1. import javax.security.auth.callback.Callback;  
  2. import javax.security.auth.callback.CallbackHandler;  
  3. import javax.security.auth.callback.UnsupportedCallbackException;  
  4. import org.apache.ws.security.WSPasswordCallback;  
  5.   
  6. public class clientPasswordCallback implements CallbackHandler {  
  7.   
  8.     public void handle(Callback[] callbacks) throws IOException,  
  9.             UnsupportedCallbackException {  
  10.         for(int i=0;i<callbacks.length;i++){  
  11.             WSPasswordCallback ps=(WSPasswordCallback) callbacks[i];  
  12.             ps.setPassword("wdwsb");  
  13.             ps.setIdentifier("admin");  
  14.         }  
  15.     }  

   到此爲止..密碼認證用戶令牌就完成了...

測試!

 

通過!

 

當然我前面寫的一篇文章是最基本的.缺少了一些jar包.會報錯的.

所以要加上以下jar包..

 

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章