`

java webservice 用户验证 (服务端 + 客户端)

 
阅读更多

说明:在网上找了一堆 handler验证的东东,试验了一下,没成功。

现在换了一种方式:在 tomcat的配置文件中添加用户角色和用户信息

             然后在 webservice的项目配置文件中增加对应的角色。从而达到 用户验证的目的。

开发环境: MyEclipse 10, Tomcat 7

参考:http://www.fengfly.com/plus/view-210099-1.html

 

先晒一下效果图:

 

以下是具体操作过程:

一, Server端代码

二, Client端的代码 

三, Tomcat的配置文件 及 Server端的配置

四,修改Client端调用webservice的方法

================================================

 

一, Server端代码

1, 在 MyEclipse 10中 新建一WebService项目:WsAuthServer

1),  ITest.java

 

[java] view plaincopy
  1. package com.Server;  
  2.   
  3. import javax.jws.WebMethod;  
  4. import javax.jws.WebService;  
  5. import javax.jws.soap.*;  
  6. import javax.jws.soap.SOAPBinding.Style;  
  7.   
  8. @WebService  
  9. @SOAPBinding(style = Style.RPC)  
  10. public interface ITest {  
  11.          @WebMethod  
  12.          public String SayHello(String name);  
  13. }  

2),  Test.java

 

 

[java] view plaincopy
  1. package com.Server;  
  2.   
  3. import javax.jws.WebService;  
  4.    
  5. @WebService(endpointInterface = "com.Server.ITest")  
  6. public class Test implements ITest {  
  7.       
  8.     @Override  
  9.     public String SayHello(String name) {  
  10.               return "Hello: " + name;  
  11.     }  
  12.       
  13. }  


3), 让MyEclipse 自动生成WebService

 

          注意:如果 是jax-ws方式创建的webservice, 必须 加入JAX-WS 相关的2个包。

    加入方法:项目名 右键 --> Build Path --> Add Libraies --> MyEclipse Libraries --> 拉到最下面 ,选中 JAX-WS的2个jar包

        

           如果 发布失败,检查 WebRoot\WEB-INF目录下的sun-jaxws.xml文件:

 

[java] view plaincopy
  1. <?xml version = "1.0"?>  
  2. <endpoints version="2.0"  
  3.     xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime">  
  4.     <endpoint name="TestPort"  
  5.         implementation="com.Server.TestDelegate"  
  6.         url-pattern="/TestPort">  
  7.     </endpoint></endpoints>  

 

 

         如果发布成功,我们可以通过这个URL在浏览器中访问:http://localhost:8080/WsAuthServer/TestPort?wsdl

 

二, Client端的代码 

1,在MyEclipse 10 中 新建一个project: WsAuthClient

1), 新建一个 WebServiceClient, 把 刚才的webservice 通过url 方式引入 其中,按MyEclipse提示会自动生成一堆代码。

                  

 

2), 新建一个 test.java

             在 main方法中粘进如下代码:

 

[java] view plaincopy
  1. TestService service = new TestService();  
  2. ITest portType = service.getTestPort();  
  3. portType.sayHello("JASON");  

         运行,会得到:Result=>Hello: JASON

 

         至此,不需要用户验证的server端和client端已完成。 但我们的主题是 需要加入用户验证,所以我们还得继续下面的步骤。

 

三, Tomcat的配置文件 及 Server端的配置

1,tomcat配置用户角色及用户信息。

我这里是 tomcat7, 找到 Tomcat 7.0\conf 目录下的 tomcat-users.xml 文件.

 

[html] view plaincopy
  1. <?xml version='1.0' encoding='utf-8'?>  
  2. <tomcat-users>  
  3.   <role rolename="WsOperator"/>  
  4.   <user username="TomcatWs" password="你的密码(自己设定)" roles="WsOperator"/>  
  5. </tomcat-users>  

     2,server端配置web.xml

 

      WsAuthServer 项目 的 WebRoot\WEB-INFO目录下的web.xml 

     加入如下内容:

 

[html] view plaincopy
  1. <security-role>  
  2.   <description>Normal operator user</description>  
  3.   <role-name>WsOperator</role-name>  
  4. </security-role>  
  5. <security-constraint>  
  6.   <web-resource-collection>  
  7.     <web-resource-name>Operator Roles Security</web-resource-name>  
  8.     <url-pattern>/TestPort</url-pattern>  
  9.   </web-resource-collection>  
  10.   <auth-constraint>  
  11.     <role-name>WsOperator</role-name>  
  12.   </auth-constraint>  
  13.   <user-data-constraint>  
  14.     <transport-guarantee>NONE</transport-guarantee>  
  15.   </user-data-constraint>  
  16. </security-constraint>  
  17. <login-config>  
  18.   <auth-method>BASIC</auth-method>  
  19. </login-config>  

       将server端的webservice重新发布一次,并重启 tomcat。

 

       再通过浏览器访问:http://localhost:8080/WsAuthServer/TestPort?wsdl,会让你验证。说明刚才的配置生效了。

 

四,修改Client端调用webservice的方法

        回到client端,重新run一下main中的方法,发现会报错,这时,client端调用webservice的方法需要重新写:

 

[java] view plaincopy
  1. package com.TEST;  
  2.   
  3. import java.net.URL;  
  4. import javax.xml.namespace.QName;  
  5. import javax.xml.ws.BindingProvider;  
  6. import javax.xml.ws.Service;  
  7.     
  8. import com.server.*;  
  9.    
  10. public class test {  
  11.   
  12.     /** 
  13.      * @param args 
  14.      */  
  15.     public static void main(String[] args) {  
  16.        
  17.         final String WS_URL = "file:C:/Program Files/Apache Software Foundation/Tomcat 7.0/webapps/WsAuthServer/WEB-INF/wsdl/TestService.wsdl";  
  18.         final String S_URL = "http://localhost:8080/WsAuthServer/TestPort?wsdl";  
  19.    
  20.         URL url;  
  21.         try {  
  22.              url = new URL(WS_URL);  
  23.           
  24.              QName qname = new QName("http://Server.com/","TestService");  
  25.              Service service = Service.create(url, qname);  
  26.              ITest port=service.getPort(ITest.class);  
  27.              BindingProvider bp = (BindingProvider) port;  
  28.              bp.getRequestContext().put(BindingProvider.USERNAME_PROPERTY,"TomcatWs");  
  29.              bp.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "111");  
  30.              bp.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,S_URL);  
  31.              String rtnMessage = port.sayHello("JASON");  
  32.              System.out.println("Result=>" + rtnMessage);  
  33.            
  34.         } catch (Exception e) {  
  35.             System.out.println("error");  
  36.             System.out.println(e.getMessage());  
  37.         }  
  38.            
  39.     }  
  40.   
  41. }  

          RUN一遍,得到如下信息:

 

    error
request requires HTTP authentication: Unauthorized

         如果把 下面的111 换成你自己的密码,又会得到 Result=>Hello: JASON

[java] view plaincopy
  1. bp.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "111");  

 

 

补充:PC的client端还有另外一种写法:

  

[java] view plaincopy
  1. final String WS_URL = "file:C:/Program Files/Apache Software Foundation/Tomcat 7.0/webapps/WsAuthServer/WEB-INF/wsdl/TestService.wsdl";  
  2.     final String S_URL = "http://localhost:8080/WsAuthServer/TestPort?wsdl";  
  3.        
  4.     URL url;  
  5.     try {  
  6.          url = new URL(WS_URL);  
  7.   
  8.          QName qname = new QName("http://Server.com/","TestService");  
  9.          TestService service = new TestService(url, qname);  
  10.          TestDelegate test = service.getTestPort();  
  11.            
  12.          BindingProvider bp = (BindingProvider) test;  
  13.          bp.getRequestContext().put(BindingProvider.USERNAME_PROPERTY,"TomcatWs");  
  14.          bp.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "你的密码");  
  15.          bp.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,S_URL);  
  16.              
  17.          String rtnMessage = test.sayHello("JASON");  
  18.          System.out.println("Result=>" + rtnMessage);  
  19.           
  20.          /*  
  21.          rtnMessage = test.sumCalc(23, 423); 
  22.          System.out.println("Result=>" + rtnMessage);  
  23.           
  24.          rtnMessage = test.getCurrentServerTime(); 
  25.          System.out.println("Result=>" + rtnMessage); */  
  26.             
  27.         /* BindingProvider bp = (BindingProvider) service; 
  28.             Map<String,Object> context = bp.getRequestContext(); 
  29.  
  30.             context.put(BindingProvider.USERNAME_PROPERTY, "myusername"); 
  31.             context.put(BindingProvider.PASSWORD_PROPERTY, "mypassword");*/  
  32.    
  33.     } catch(Exception ex)  
  34.     {  
  35.         System.out.println(ex.getMessage());  
  36.     }  
  37.       
  38.     System.out.println("the end.");  

 

至此, 一个完整的用户验证结束。非常感谢。

 

内容来源于 小红提技术博客,http://www.xiaohongti.com/ 转载请保留地址,尊重版权。

分享到:
评论

相关推荐

    基于axis2实现的webservice简单实现(客户端+服务端)。

    【标题】中的“基于axis2实现的webservice简单实现(客户端+服务端)”表明了本文将探讨如何使用Apache Axis2框架来创建和消费Web服务。Apache Axis2是Apache软件基金会开发的一个Web服务引擎,它提供了高效且灵活的...

    Spring+xFire+wss4j配置Helloworld完整版,Myeclipse项目服务端+客户端.rar

    这是一个完整的MyEclipse项目,包括服务端和客户端的工程,旨在帮助开发者快速理解和实践相关技术。 首先,Spring是一个极其流行的Java应用框架,它提供了全面的编程和配置模型,用于简化企业级应用的开发。在Web...

    WebService 服务端及客户端样例工程

    本示例工程涵盖了WebService服务端和客户端的实现,帮助开发者更好地理解和应用WebService技术。 服务端开发: 在服务端,我们通常会创建一个SOAP(Simple Object Access Protocol)服务,它是WebService最常见的一...

    Webservice之JaxWs服务端和客户端实现

    本教程将详细介绍如何使用JAX-WS实现服务端和客户端的Web服务。 ### 1. JAX-WS简介 JAX-WS是Java平台上的标准,用于构建和部署SOAP(Simple Object Access Protocol)Web服务。它简化了Web服务开发,通过提供基于...

    Java webservice cxf客户端调用demo和服务端

    Java WebService CXF客户端调用和服务端的实现是企业级应用程序中常见的通信方式,它基于标准的SOAP(Simple Object Access Protocol)协议,提供了一种在分布式环境中交换信息的方法。CXF是一个开源框架,它简化了...

    使用cxf和spring开发基于https的webservice服务端以及客户端样例

    这些文件将帮助我们搭建和验证服务端和客户端的正确性。在实际开发中,这些文件应当根据项目结构进行组织,例如,XML配置文件放在src/main/resources目录下,测试类放在src/test/java目录。 总的来说,通过Apache ...

    webservice服务端及客户端实例

    这个实例将探讨WebService在服务端和客户端的实现,帮助我们理解如何通过XML、SOAP(简单对象访问协议)和WSDL(Web服务描述语言)进行数据交换。 1. **WebService基础** WebService的核心思想是利用互联网协议...

    webservice项目客户端和服务端

    在这个项目中,我们关注的是WebService客户端和服务端的实现,特别是使用了Axis2框架。 Axis2是Apache软件基金会开发的一个开放源码的Web服务平台,用于构建和部署Web服务。它提供了高级的消息处理机制和多种协议...

    cxf webservice简单例子 服务端 客户端

    本教程将基于CXF构建一个简单的Web服务,包括服务端和客户端的实现。我们将使用CXF提供的工具和服务接口来创建服务,然后通过客户端调用来验证服务的正确性。 ### 1. CXF简介 CXF是Apache软件基金会的一个项目,它...

    java axis 调用webservice服务端

    Java Axis调用WebService服务端是Java开发者在进行分布式系统交互时常见的一种技术实践。Axis是Apache软件基金会开发的一个开源项目,它提供了一种方便、高效的方式,使得Java应用程序能够作为客户端来消费或作为...

    根据wsdl生成webservice服务端(3种方式)

    在日常开发中,通常是由开发团队构建WebService服务端,客户端则通过服务端提供的WS-Definition Language (WSDL) 文件生成客户端代理并进行交互。但有时也会遇到特殊情况,比如与特定企业合作时,对方可能仅提供WSDL...

    cxf+spring开发webservice客户端与服务端实例

    4. 测试:编写测试用例,验证服务端和客户端的正常交互。 六、注意事项 1. 异常处理:在服务端和客户端都要进行适当的异常处理,确保服务的健壮性。 2. 安全性:考虑服务的安全性,如使用HTTPS,认证和授权等。 3. ...

    Java Webservice Axis2 Client(含soapheader验证)

    总之,Java Webservice Axis2 Client的开发涉及到生成客户端代码、设置SOAP Header、调用服务和处理响应等多个步骤。了解这些概念和API对于构建安全、可靠的Web服务客户端至关重要。在实际项目中,确保遵循最佳实践...

    android webservice 客户端、服务端实例

    本实例将深入探讨如何构建一个Android Web Service客户端和服务端,并提供可直接运行的代码示例。以下是对这两个重要组件的详细说明。 **一、Android Web Service客户端** 在Android客户端,通常使用HTTP库来调用...

    xfire实现webService服务端与客户端使用说明

    本压缩包中的"xFire实现webService服务和使用服务说明"文件,包含了详细的步骤和示例代码,帮助读者深入理解Xfire在Web服务端和客户端的具体应用。建议结合文件内容,动手实践,以巩固理论知识。 **八、总结** 掌握...

    Linux下用gSOAP开发Web Service服务端和客户端程序

    在Linux环境下利用gSOAP开发Web Service服务端与客户端程序,是一项深入理解Web Service技术与Linux平台编程的关键技能。本文将详细解析如何在Linux系统中利用gSOAP工具包创建Web Service服务端与客户端程序,包括...

    java的webservice服务端程序

    Java WebService服务端程序是一种基于Java技术实现的网络通信服务,它允许不同系统间的应用程序通过互联网进行交互。在本文中,我们将深入探讨Java WebService的核心概念、开发过程以及相关技术。 1. **WebService...

    java webService接口开发案例

    综上所述,Java WebService接口开发涉及多个步骤,包括接口定义、服务实现、客户端代理生成、SOAP消息交换以及安全性和服务管理。掌握这些知识将有助于构建高效、可靠的分布式系统。通过实际案例的实践,你可以更...

    groovy编写webservice服务端和客户端(含连接数据并输出JSON数据)

    标题中的“groovy编写webservice服务端和客户端(含连接数据并输出JSON数据)”表明了本文将探讨如何使用Groovy编程语言来构建Web服务的服务器端和客户端,并且这些服务会涉及与数据库的交互以及JSON数据的处理。...

    使用cxf和spring开发基于https的webservice服务端以及客户端样例源码.rar

    6. **创建客户端**:客户端的开发主要包括以下步骤:生成服务代理类(可以使用CXF的wsdl2java工具)、配置客户端的SSL信任策略,以及调用服务接口的方法。 7. **测试与调试**:开发完成后,可以通过发送请求来测试...

Global site tag (gtag.js) - Google Analytics