webservice的安全机制2---handler实现.doc_第1页
webservice的安全机制2---handler实现.doc_第2页
webservice的安全机制2---handler实现.doc_第3页
webservice的安全机制2---handler实现.doc_第4页
webservice的安全机制2---handler实现.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本节摘要:本节介绍使用handler的方式来实现webservice的IP地址的校验。1.引言前一节介绍了使用users.lst文件来实现webservice的用户名和密码的校验,本节介绍使用webservice的handler来实现webservice的安全校验。这里,不用用户名和密码来实现安全校验,换一种方式,采用IP地址校验的方式。这里通过一个配置文件来控制是否打开IP校验开关以及允许哪些IP地址的客户端可以访问。这里的开发还是基于上一节HelloService这个基本的webservice基础上来开发。2.项目环境 system:win7 myeclipse:6.5 tomcat:5.0 JDK:开发环境1.5,编译环境1.4 axis:1.4 项目结构图如下:3.示例代码配置文件web.xml-web项目的配置文件,和基本的webservice配置没任何区别web.xml 1 2 7 8 9 AxisServlet10 11 org.apache.axis.transport.http.AxisServlet12 13 14 15 AxisServlet16 /services/*17 18 19 server-config.wsdd-axis的配置文件,这里的配置就是一个webservice+handler的基本配置server-config.wsdd 1 2 4 5 6 7 8 10 11 13 14 15 17 18 19 20 21 22 23 24 25 26 27 29 31 33 34 35 36 37 /axis/wsdd/38 39 40 41 42 43 44 45 46 47 49 50 52 54 56 58 60 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 服务端文件服务类:HelloServiceImpl.javaHelloServiceImpl.java 1 package server.service; 2 3 public class HelloServiceImpl 4 5 public String hello(String s) 6 System.out.println(我是服务端.); 7 System.out.println(方法的入参为:+s); 8 return hello, + s; 9 10 handler处理类和配置文件:IpAuthentionHandler.javaIpAuthentionHandler.java 1 package server.handler; 2 3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.util.Properties; 6 import java.util.regex.Pattern; 7 8 import javax.servlet.http.HttpServletRequest; 9 10 import org.apache.axis.AxisFault;11 import org.apache.axis.MessageContext;12 import org.apache.axis.handlers.BasicHandler;13 import org.apache.axis.transport.http.HTTPConstants;14 import org.apache.axis.utils.Messages;15 16 /利用handler进行客户端IP校验17 public class IpAuthentionHandler extends BasicHandler 18 19 private static final long serialVersionUID = 1L;20 21 private static Properties p = new Properties();22 23 static 24 InputStream in = null;25 try 26 /注意这里的文件的存放位置和文件路径的书写方式; path 不以/开头时默认是从此类所在的包下取资源27 /这里如果我们把perties放在src根目录下,然后采用src/perties的形式是没法取到此文件的;28 /此时需要使用 in=IpAuthentionHandler.class.getClassLoader().getResourceAsStream(perties);29 in = IpAuthentionHandler.class.getResourceAsStream(perties); 30 p.load(in);31 catch (IOException e) 32 System.out.println(perties配置文件加载失败!);33 e.printStackTrace();34 finally 35 if (null != in)36 try 37 in.close();38 catch (IOException e) 39 System.out.println(关闭流操作发生异常!);40 e.printStackTrace();41 42 43 44 45 public void invoke(MessageContext messageContext) throws AxisFault 46 String status=(String)this.getOption(status);47 System.out.println(IpAuthentionHandlers status is :+status);48 49 String uri = messageContext.getSOAPActionURI();50 String targetService = messageContext.getTargetService();51 52 System.out.println(webservice开始IP认证:service + uri + /+ targetService);53 String name = HTTPConstants.MC_HTTP_SERVLETREQUEST;54 55 HttpServletRequest request = (HttpServletRequest) messageContext56 .getProperty(name);57 String remoteAddr = request.getRemoteAddr();58 System.out.println(客户端IP: + remoteAddr);59 60 String switcher = p.getProperty(ip_switcher);61 System.out.println(IP校验开关: + switcher);62 63 if (on.equalsIgnoreCase(switcher) 64 System.out.println(服务端IP校验开关处于【打开】状态,需要校验IP);65 66 String regx = p.getProperty(ip_allow);67 System.out.println(允许调用服务的IP地址有: + regx);68 69 if (null != regx & regx.length() 0) 70 71 String regxArray = regx.split(,);72 boolean ip_check = false;73 for (int i = 0; i regxArray.length; i+) 74 Pattern p = Ppile(regxArrayi);75 boolean flag = p.matcher(remoteAddr).find();76 if (flag) 77 ip_check = true;78 break;79 80 81 82 if (ip_check) 83 System.out.println(IP校验通过!);84 else 85 throw new AxisFault(,Messages.getMessage(wrong ip:+remoteAddr),null,null);86 87 else 88 System.out.println(请指定校验的客户端IP!);89 throw new AxisFault();90 91 else if (off.equalsIgnoreCase(switcher) 92 System.out.println(服务端IP校验开关处于【关闭】状态,不需要校验IP);93 94 95 96 perties 1 #IP校验配置#2 #IP校验开关 只能填写on或者off,不区分大小写3 ip_switcher=on4 5 #允许调用对应的webservice服务的客户端IP地址 多个IP地址之间用逗号隔开6 #当ip校验开关打开的时候,必须配置IP地址7 ip_allow=24,23,8 9 #IP校验配置#客户端文件Test1.javaTest1.java 1 package client; 2 3 import .URL; 4 5 import javax.xml.rpc.ParameterMode; 6 7 import org.apache.axis.client.Call; 8 import org.apache.axis.encoding.XMLType; 9 10 public class Test1 11 12 public static void main(String args) throws Exception 13 webservice_user();14 15 16 public static void webservice_user() throws Exception 17 18 / 1.创建service对象,通过axis自带的类创建19 org.apache.axis.client.Service service = new org.apache.axis.client.Service();20 21 / 2.创建url对象22 String wsdlUrl = http:/localhost:8080/WebService05_Security/services/HelloService?wsdl;/ 请求服务的URL23 URL url = new URL(wsdlUrl);/ 通过URL类的构造方法传入wsdlUrl地址创建URL对象24 25 / 2.创建服务方法的调用者对象call,设置call对象的属性26 Call call = (Call) service.createCall();27 call.setTargetEndpointAddress(url);/ 给call对象设置请求的URL属性28 String serviceName = hello;/ webservice的方法名29 call.setOperationName(serviceName);/ 给call对象设置调用方法名属性30 call.addParameter(s, XMLType.XSD_STRING, ParameterMode.IN);/ 给call对象设置方法的参数名、参数类型、参数模式31 call.setReturnType(XMLType.SOAP_STRING);/ 设置调用方法的返回值类型32 / call.setTimeout(new Integer(200);/设置超时限制33 34 / 4.通过invoke方法调用webservice35 String str = new String(pantp);36 String dept = (String) call.invoke(new Object str );/ 调用服务方法37 38 / 5.打印返回结果39 System.out.println(我是客户端.);40 System.out.println(dept);41 42 43 验证结果发布工程,启动tomcat服务器:1.看webservice在浏览器中是否可以正常显示在浏览器中输入wsdl地址: http:/localhost:8080/WebService05_Security/services/HelloServ

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论