`

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包..

 

 

转自:http://blog.csdn.net/keeyce/article/details/7090753

 

分享到:
评论
1 楼 锦毛鼠 2016-09-29  
请问下您现在有没有这个demo啊?可以发我看看吗?

相关推荐

Global site tag (gtag.js) - Google Analytics