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

服务端

服务端就要在每个方法里面加上解析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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值