Axis2+SOAP Header简单的验证方法实践

来源:互联网 发布:国外的移动网络制式 编辑:程序博客网 时间:2024/06/10 22:55

服务端

服务端就要在每个方法里面加上解析SOAP Header,并进行安全校验的代码即可,记住,是每一个方法里面都加,是everyone

虽然是每一都需要添加校验代码,但庆幸的是,校验过程都是一致的,实现一个通用的方法,每次调用就行。

这里给出一个校验方法的代码:

import java.util.Iterator;  import org.apache.axiom.om.OMElement;  import org.apache.axis2.AxisFault;  import org.apache.axis2.context.MessageContext;    public class LoginCheck  {      /**      * 〈一句话功能简述〉 〈功能详细描述〉      *       * @throws AxisFault      */      public static void checkUserPwd() throws AxisFault      {          MessageContext msgContext = MessageContext.getCurrentMessageContext();          // 获取Head          Iterator list = (Iterator) msgContext.getEnvelope().getHeader()                  .getFirstElement().getChildren();          String Username = "";          String Password = "";          while (list.hasNext())          {              OMElement element = (OMElement) list.next();              if (element.getLocalName().equals("Username"))              {                  Username = element.getText();              }              if (element.getLocalName().equals("Password"))              {                  Password = element.getText();              }          }          if (!Username.equals("toone") || !Password.equals("111111"))          {              throw new AxisFault(                      " Authentication Fail! Check username/password ");          }      }  }  

 之后在服务中的每个方法里面加上一句代码,只要一句就行:

//当客户端调用该方法时,在此处先进行用户名和密码校验,如果校验通过则继续后续逻辑处理,如果不通过则抛出异常。      LoginCheck.checkUserPwd();   

服务端就这么简单,下面再说说客户端。


客户端

客户端也不难,就是往SOAPHeader中添加相应字段就行,网上很多代码可以参考。

这里是我用到的代码:

import org.apache.axiom.om.OMAbstractFactory;   import org.apache.axiom.om.OMElement;   import org.apache.axiom.om.OMFactory;   import org.apache.axiom.om.OMNamespace;    public class HeaderOMElement {    /**  * 〈一句话功能简述〉  * 〈功能详细描述〉   *  @return     */  public static OMElement createHeaderOMElement(){     OMFactory factory = OMAbstractFactory.getOMFactory();        OMNamespace SecurityElementNamespace = factory.createOMNamespace("http://handler.com","wsse");           OMElement authenticationOM = factory.createOMElement("Authentication",                   SecurityElementNamespace);           OMElement usernameOM = factory.createOMElement("Username",                   SecurityElementNamespace);           OMElement passwordOM = factory.createOMElement("Password",                   SecurityElementNamespace);           usernameOM.setText("toone");           passwordOM.setText("111111");           authenticationOM.addChild(usernameOM);           authenticationOM.addChild(passwordOM);           return authenticationOM;    }   }   

然后在需要调用服务的时候,将创建得到的OMElement附加上去就行了。

这里也给出代码参考:

RPCServiceClient client = new RPCServiceClient();    // 向Soap Header中添加校验信息  client.addHeader(HeaderOMElement.createHeaderOMElement());  

其他调用的Web服务的代码参考我上一篇文章就行了,不在重复写了。

0 0