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

2024-06-03 14:32

本文主要是介绍Axis2+SOAP Header简单的验证方法实践,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

服务端

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

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

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

[java] view plain copy
print ?
  1. import java.util.Iterator;    
  2. import org.apache.axiom.om.OMElement;    
  3. import org.apache.axis2.AxisFault;    
  4. import org.apache.axis2.context.MessageContext;    
  5.     
  6. public class LoginCheck    
  7. {    
  8.     /**  
  9.      * 〈一句话功能简述〉 〈功能详细描述〉  
  10.      *   
  11.      * @throws AxisFault  
  12.      */    
  13.     public static void checkUserPwd() throws AxisFault    
  14.     {    
  15.         MessageContext msgContext = MessageContext.getCurrentMessageContext();    
  16.         // 获取Head    
  17.         Iterator list = (Iterator) msgContext.getEnvelope().getHeader()    
  18.                 .getFirstElement().getChildren();    
  19.         String Username = "";    
  20.         String Password = "";    
  21.         while (list.hasNext())    
  22.         {    
  23.             OMElement element = (OMElement) list.next();    
  24.             if (element.getLocalName().equals("Username"))    
  25.             {    
  26.                 Username = element.getText();    
  27.             }    
  28.             if (element.getLocalName().equals("Password"))    
  29.             {    
  30.                 Password = element.getText();    
  31.             }    
  32.         }    
  33.         if (!Username.equals("toone") || !Password.equals("111111"))    
  34.         {    
  35.             throw new AxisFault(    
  36.                     " Authentication Fail! Check username/password ");    
  37.         }    
  38.     }    
  39. }    
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 ");  }  }  
}  

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

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

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


客户端

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

这里是我用到的代码:

[java] view plain copy
print ?
  1. import org.apache.axiom.om.OMAbstractFactory;     
  2. import org.apache.axiom.om.OMElement;     
  3. import org.apache.axiom.om.OMFactory;     
  4. import org.apache.axiom.om.OMNamespace;    
  5.     
  6. public class HeaderOMElement {     
  7.  /**  
  8.  * 〈一句话功能简述〉  
  9.  * 〈功能详细描述〉   
  10.  *  @return      
  11. */    
  12. public static OMElement createHeaderOMElement(){     
  13.   OMFactory factory = OMAbstractFactory.getOMFactory();     
  14.      OMNamespace SecurityElementNamespace = factory.createOMNamespace("http://handler.com","wsse");     
  15.         OMElement authenticationOM = factory.createOMElement("Authentication",     
  16.                 SecurityElementNamespace);     
  17.         OMElement usernameOM = factory.createOMElement("Username",     
  18.                 SecurityElementNamespace);     
  19.         OMElement passwordOM = factory.createOMElement("Password",     
  20.                 SecurityElementNamespace);     
  21.         usernameOM.setText("toone");     
  22.         passwordOM.setText("111111");     
  23.         authenticationOM.addChild(usernameOM);     
  24.         authenticationOM.addChild(passwordOM);     
  25.         return authenticationOM;     
  26.  }     
  27. }     
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附加上去就行了。

这里也给出代码参考:

[java] view plain copy
print ?
  1. RPCServiceClient client = new RPCServiceClient();    
  2.     
  3. // 向Soap Header中添加校验信息    
  4. client.addHeader(HeaderOMElement.createHeaderOMElement());    
RPCServiceClient client = new RPCServiceClient();  // 向Soap Header中添加校验信息  
client.addHeader(HeaderOMElement.createHeaderOMElement());  

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

这篇关于Axis2+SOAP Header简单的验证方法实践的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1027256

相关文章

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

破茧 JDBC:MyBatis 在 Spring Boot 中的轻量实践指南

《破茧JDBC:MyBatis在SpringBoot中的轻量实践指南》MyBatis是持久层框架,简化JDBC开发,通过接口+XML/注解实现数据访问,动态代理生成实现类,支持增删改查及参数... 目录一、什么是 MyBATis二、 MyBatis 入门2.1、创建项目2.2、配置数据库连接字符串2.3、入

Python安装Pandas库的两种方法

《Python安装Pandas库的两种方法》本文介绍了三种安装PythonPandas库的方法,通过cmd命令行安装并解决版本冲突,手动下载whl文件安装,更换国内镜像源加速下载,最后建议用pipli... 目录方法一:cmd命令行执行pip install pandas方法二:找到pandas下载库,然后

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

SQL Server安装时候没有中文选项的解决方法

《SQLServer安装时候没有中文选项的解决方法》用户安装SQLServer时界面全英文,无中文选项,通过修改安装设置中的国家或地区为中文中国,重启安装程序后界面恢复中文,解决了问题,对SQLSe... 你是不是在安装SQL Server时候发现安装界面和别人不同,并且无论如何都没有中文选项?这个问题也

Java Thread中join方法使用举例详解

《JavaThread中join方法使用举例详解》JavaThread中join()方法主要是让调用改方法的thread完成run方法里面的东西后,在执行join()方法后面的代码,这篇文章主要介绍... 目录前言1.join()方法的定义和作用2.join()方法的三个重载版本3.join()方法的工作原

在Java中使用OpenCV实践

《在Java中使用OpenCV实践》用户分享了在Java项目中集成OpenCV4.10.0的实践经验,涵盖库简介、Windows安装、依赖配置及灰度图测试,强调其在图像处理领域的多功能性,并计划后续探... 目录前言一 、OpenCV1.简介2.下载与安装3.目录说明二、在Java项目中使用三 、测试1.测

MyBatis-Plus 自动赋值实体字段最佳实践指南

《MyBatis-Plus自动赋值实体字段最佳实践指南》MyBatis-Plus通过@TableField注解与填充策略,实现时间戳、用户信息、逻辑删除等字段的自动填充,减少手动赋值,提升开发效率与... 目录1. MyBATis-Plus 自动赋值概述1.1 适用场景1.2 自动填充的原理1.3 填充策略

Java中使用 @Builder 注解的简单示例

《Java中使用@Builder注解的简单示例》@Builder简化构建但存在复杂性,需配合其他注解,导致可变性、抽象类型处理难题,链式编程非最佳实践,适合长期对象,避免与@Data混用,改用@G... 目录一、案例二、不足之处大多数同学使用 @Builder 无非就是为了链式编程,然而 @Builder