Axis2+SOAP Header简单的验证方法实践
2017-01-24 00:27
288 查看
服务端
服务端就要在每个方法里面加上解析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服务的代码参考我上一篇文章就行了,不在重复写了。
相关文章推荐
- 2017上半年的目标
- 51nod1102(单调栈/预处理)
- Scapy畸形报文攻击
- 【Spring-web】AsyncRestTemplate源码学习
- 计算机操作系统
- Angular2新的体验
- Angular2新的体验
- C/C++轻松写基于UDP的远程控制
- STL自我强化
- 学习hibernate_03_实体常用的hibernate注解
- Uva10635 Prince and Princess
- 手把手教你硬件raid5组建图文指南
- swift不用声明类型那些事
- Linux网卡参数详解
- RadioButton和RadioGroup的使用
- LeetCode Game of Life 解题
- 模板队列-支持多线程
- bzoj2038: [2009国家集训队]小Z的袜子(hose)
- Hdu1423 Greatest Common Increasing Subsequence
- java栈的实现