本文主要是介绍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 ");
- }
- }
- }
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();
//当客户端调用该方法时,在此处先进行用户名和密码校验,如果校验通过则继续后续逻辑处理,如果不通过则抛出异常。 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;
- }
- }
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());
RPCServiceClient client = new RPCServiceClient(); // 向Soap Header中添加校验信息
client.addHeader(HeaderOMElement.createHeaderOMElement());
其他调用的Web服务的代码参考我上一篇文章就行了,不在重复写了。
这篇关于Axis2+SOAP Header简单的验证方法实践的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!