GVKun编程网logo

WebService中的用户验证问题(webservice 验证)

8

以上就是给各位分享WebService中的用户验证问题,其中也会对webservice验证进行解释,同时本文还将给你拓展axis2实现webservice之使用services.xml文件发布WebS

以上就是给各位分享WebService中的用户验证问题,其中也会对webservice 验证进行解释,同时本文还将给你拓展axis2实现webservice之使用services.xml文件发布WebService、PHP使用SOAP扩展实现WebService的方法 webservice视频教程 c# webservice php webservice、php写webservice,验证问题如何解决?、web-services – Webservice和Enterprise Service Bus之间的区别等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

WebService中的用户验证问题(webservice 验证)

WebService中的用户验证问题(webservice 验证)

           <configuration>             <system.web>             <authentication   mode="Windows"/>         </system.web>             <location   path="secureservice.asmx">                 <system.web>                 <authorization>                     <allow   users="Administrator"/>                     <allow   users="DOMAIN/Bradley"/>                     <deny   roles="BUILTIN/Power   Users"/>                 </authorization>             </system.web>             </location>         </configuration>         下面是一个使用SOAPHeader的例子:     soapheaders.aspx         <%@   Import   Namespace="SoapHeaders"   %>             <script   language="C#"   runat="server">                 public   void   Page_Load(Object   sender,  EventArgs   e)   {                         Response.Write("<h4><font   face=/"verdana/">Using   Soap   Headers   for   Custom   Authentication</font></h4>");                         //   Create   a   new   instance   of   the   UsingSoapHeaders                     //   proxy   class   used   to   call   the   remote   .asmx   file                     HeaderService   h   =   new   HeaderService();                         //   Call   the   secure   method   without   credentials                     Response.Write("First   call   result:   <p>");                     try   {                         Response.Write(h.SecureMethod()   +   "<p>");                     }                     catch   (Exception   ex)   {                         Response.Write("<pre>"   +   ex.StackTrace   +   "</pre><p>");                     }                         //   Create   a   new   instance   of   the   AuthHeader   class                     AuthHeaderCS   myHeader   =   new   AuthHeaderCS();                         //   Set   the   value   of   myHeader                     myHeader.Username   =   "JohnDoe";                     myHeader.Password   =   "password";                         //   Set   the   AuthHeader   public   member   of   the                     //   UsingSoapHeaders   class   to   myHeader                     h.AuthHeaderCSValue   =   myHeader;                         //   Call   the   secure   method   with   credentials                     Response.Write("Second   call   result:   <p><pre>"   +   h.SecureMethod()   +   "</pre>");             }             </script>             soapheaders.asmx:         <%@   WebService   Language="C#"    %>         using   System;     using   System.Web.Services;     using   System.Web.Services.Protocols;         //   Note   the   namespace   has   to   be   different   from   the   one   used     //   on   the   proxy   dll   or   we   get   errors   about   AuthHeader   being     //   defined   in   multiple   places.     namespace   SoapHeadersCS   {                   //   AuthHeader   class   extends   from   SoapHeader             public   class   AuthHeaderCS   :   SoapHeader   {                     public   string   Username;                     public   string   Password;             }                 [WebService(Description="Simple   sample   to   demonstrate   use   of   SOAP   Headers")]             public   class   HeaderService   {                         public   AuthHeaderCS   sHeader;                         [WebMethod(Description="This   method   requires   a   custom   soap   header   set   by   the   caller")]                     [SoapHeader("sHeader")]                     public   string   SecureMethod()   {                                 if   (sHeader   ==   null)                                 return   "ERROR:   Please   supply   credentials";                                 string   usr   =   sHeader.Username;                             string   pwd   =   sHeader.Password;                                 if   (AuthenticateUser(usr,  pwd))   {                                       return   "SUCCESS:   "   +   usr   +   ","   +   pwd;                             }                             else   {                                       return   "ERROR:   Could   not   authenticate";                             }                     }                         private   bool   AuthenticateUser(string   usr,  string   pwd)   {                                 if   ((usr   !=   null)&&(pwd   !=   null))   {                                     //   Could   query   a   database   here   for   credentials...                                     return   true;                               }                             return   false;                     }             }     }       

axis2实现webservice之使用services.xml文件发布WebService

axis2实现webservice之使用services.xml文件发布WebService

       还是对教程的延伸,本来是周五要写的,但是耽搁了一下,就拖到周一了。

      Axis2实现Web Service,虽然可以将POJO类放在axis2\WEB-INF\pojo目录中直接发布成Web Service,这样做不需要进行任何配置,但这些POJO类不能在任何包中。这似乎有些不方便,为此,Axis2也允许将带包的POJO类发布成Web Service
   
先实现一个POJO类,代码如下: 

package service; public class MyService { public String getGreeting(String name) { return "您好 " + name; } public void update(String data) { System.out.println("<" + data + ">已经更新"); } }

这个类有两个方法,这两个方法都需要发布成Web Service方法。这种方式和直接放在pojo目录中的POJO类不同。要想将MyService类发布成Web Service,需要一个services.xml文件,这个文件需要放在meta-inf目录中,该文件的内容如下:

<service name="myService"> <description> Web Service例子 </description> <parameter name="ServiceClass"> service.MyService </parameter> <messageReceivers> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"https://www.jb51.cc/tag/cme/" target="_blank">cmessageReceiver" /> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"/> </messageReceivers> </service>

其中<service>元素用于发布Web Service,一个<service>元素只能发布一个WebService类,name属性表示WebService名,如下面的URL可以获得这个WebServiceWSDL内容:

http://localhost:8080/axis2/services/myService?wsdl (这个得等到.aar文件出来之后)

其中name属性名就是上面URL"?""/"之间的部分。

<description>元素表示当前Web Service的描述,<parameter>元素用于设置WebService的参数,在这里用于设置WebService对应的类名。在这里最值得注意的是<messageReceivers>元素,该元素用于设置处理WebService方法的处理器。例如,getGreeting方法有一个返回值,因此,需要使用可处理输入输出的RPcmessageReceiver类,而update方法没有返回值,因此,需要使用只能处理输入的RPCInOnlyMessageReceiver类。

使用这种方式发布WebService,必须打包成.aar文件,..aar文件实际上就是改变了扩展名的.jar文件。在现在建立了两个文件(这两个文件夹任意):MyService.javaservices.xml。将MyService.java编译,生成MyService.classservices.xmlMyService.class文件的位置如下:

D:\ws\service\MyService.class

D:\ws\meta-inf\services.xml

   
 windows控制台中进入ws目录,并输入如下的命令生成.aar文件(实际上,.jar文件也可以发布webservice,但axis2官方文档中建议使用.aar文件发布webservice):

jar cvf ws.aar .    jar cvf AxisTest.aar .

    如下是我测试的过程

        原来发现不管要.aar,之后还需要一个“.”,即.arr.,但是最坑爹的就是这里了,加了“.”之后还是不对啊,最后的问题居然是这个后面的点要空一格,不能紧挨着.arr


      如下成功之后的文件夹情况


    最后将ws.aar文件复制到<Tomcat安装目录>\webapps\axis2\WEB-INF\services目录中,启动Tomcat后,就可以调用这个WebService了。

      已经显示webservice发布成功了,接下来就是编写客户端进行调运了,跟前面一样,也需要wsdl2java命令去生成stub类,过程我就不多说了,之前的博客里有

如下是调用客户端的代码

package service; import org.apache.axis2.AxisFault; public class MyServiceStubClient { public static void main(String[] args) { // Todo Auto-generated method stub try { MyServiceStub mss = new MyServiceStub(); MyServiceStub.GetGreeting gg = new MyServiceStub.GetGreeting(); MyServiceStub.Update up = new MyServiceStub.Update(); gg.setName("美女"); up.setData("帅哥"); try { mss.update(up); System.out.println("美女"+mss.getGreeting(gg).get_return()); } catch (Exception e) { // Todo Auto-generated catch block e.printstacktrace(); System.out.println("发生异常"); } } catch (AxisFault e) { // Todo Auto-generated catch block e.printstacktrace(); } } }


运行结果

由于“帅哥”是在服务器端打印的,所以客户端是看不到的。

在打包arr文件的时候,发现有一个build.xml文件,这个是ant脚本中的知识,在本题中暂时不涉及,以后再介绍。

 

如果想发布多个WebService,可以使用<serviceGroup>元素,如再建立一个MyService1类,代码如下:

package service public class MyService1 { public String getName() { return "bill"; } }


services.xml文件中可以使用如下的配置代码来配置MyServiceMyService1类:

<serviceGroup> <service name="myService"> <description> Web Service例子 </description> <parameter name="ServiceClass"> service.MyService </parameter> <messageReceivers> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"https://www.jb51.cc/tag/cme/" target="_blank">cmessageReceiver" /> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"/> </messageReceivers> </service> <service name="myService1"> <description> Web Service例子 </description> <parameter name="ServiceClass"> service.MyService1 </parameter> <messageReceivers> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"https://www.jb51.cc/tag/cme/" target="_blank">cmessageReceiver" /> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"/> </messageReceivers> </service> </serviceGroup>

PHP使用SOAP扩展实现WebService的方法 webservice视频教程 c# webservice php webservice

PHP使用SOAP扩展实现WebService的方法 webservice视频教程 c# webservice php webservice

php写webservice,验证问题如何解决?

php写webservice,验证问题如何解决?

查了一些资料,好像都是每一次调用webservice方法时,都需要附带客户验证信息,能否像普通的网页浏览那样,登录后,在会话期内任意访问都不需要再次提供客户验证信息呢?


回复讨论(解决方案)

在session中保留id

那是提供webservice方决定的!

那是提供webservice方决定的!

不单是提供webservice方决定,还有访问方式,比如使用basic验证,用浏览器访问的话,会提示一个验证框,如果验证通过,同一进程再次访问就不会提示框了。

我的问题在于curl请求webservice的话,似乎就必须每次都提供验证信息来完成调用。有没有一次验证的解决方案呢?

你查查看cookie,HTTP header中有没有id之类的值,每次请求的时候都要将这个值发给服务器

你查查看cookie,HTTP header中有没有id之类的值,每次请求的时候都要将这个值发给服务器

思路还是不够完整

你说的是浏览器验证 
用户:$_SERVER[''PHP_AUTH_USER'']  
密码:$_SERVER[''PHP_AUTH_PW'']

参考:http://php.net/manual/en/features.http-auth.php

function authenticate() { header(''WWW-Authenticate: Basic realm=""''); header(''HTTP/1.0 401 Unauthorized''); echo "You must enter a valid login ID and password to access this resource\n"; exit;}if (addslashes($_SERVER[''PHP_AUTH_USER''])!= ''adminname'' || addslashes($_SERVER[''PHP_AUTH_PW''])!= ''adminadmin'') { header(''WWW-Authenticate: Basic realm=""''); header(''HTTP/1.0 401 Unauthorized''); echo "对不起,无权进入! user=".$_SERVER[''PHP_AUTH_USER'']."password=".$_SERVER[''PHP_AUTH_PW'']; //后面这半句我是为了测试而加上去的;}else{ echo "进入! user=".$_SERVER[''PHP_AUTH_USER'']."password=".$_SERVER[''PHP_AUTH_PW'']; //后面这半句我是为了测试而加上去的; echo "<p>Welcome: {$_SERVER[''PHP_AUTH_USER'']}<br />";// echo "Old: {$_REQUEST[''OldAuth'']}";// echo "<form action='''' METHOD=''post''>\n";// echo "<input type=''hidden'' name=''SeenBefore'' value=''1'' />\n";// echo "<input type=''hidden'' name=''OldAuth'' value=''{$_SERVER[''PHP_AUTH_USER'']}'' />\n";// echo "<input type=''submit'' value=''Re authenticate'' />\n";// echo "</form></p>\n"; echo date(''h:i:s'') . "<br />"; //暂停 10 秒 sleep(10); //重新开始 echo date(''h:i:s''); header(''WWW-Authenticate: Basic realm=""''); header(''HTTP/1.0 401 Unauthorized''); }//可以直接使用试试看是不是你想要的结果
登录后复制

你说的是浏览器验证 
用户:$_SERVER[''PHP_AUTH_USER'']  
密码:$_SERVER[''PHP_AUTH_PW'']

参考:http://php.net/manual/en/features.http-auth.php


应该不是我要的。我想问的包含两方面的问题:

1、开放的webservice有哪些验证机制?比如我说key是一种,http的basic验证也是一种,还有其他哪些方式呢?

2、想知道有哪些验证机制是为了这个目的:有没有一种验证机制,在php调用webservice时,只需在第一次请求中发送验证信息,以后调用就不需要再次验证了--类似于普通页面浏览的过程,填写一次登陆信息后,只要不超时,访问这个网站的其他任何页面都不需要再登陆。

引用 7 楼 ihefe 的回复:

你说的是浏览器验证
用户:$_SERVER[''PHP_AUTH_USER'']
密码:$_SERVER[''PHP_AUTH_PW'']

参考:http://php.net/manual/en/features.http-auth.php



应该不是我要的。我想问的包含两方面的问题:

1、开放的webservice有哪些验证机制?比……
这个就是只验证一次, 你试过我给你的代码吗?把最后
    echo date(''h:i:s'');
    header(''WWW-Authenticate: Basic realm=""'');
    header(''HTTP/1.0 401 Unauthorized'');

去掉

呃也就是你说的http basic验证

今天回头来看这个问题,似乎可以用curl发送cookie的方式解决。

myservice.php

myproxy.php

myclient.php

用户在myclient.php(或者其他地方登陆),通过后可直接访问myproxy.php,在myproxy.php中通过curl的方式连同cookie一起请求myservice.php。

各位的意见如何?

lz说的完全可以采用session机制来实现,当你发送请求时,在服务器端建立session,服务器处理完用户请求后,将sid发送给客户端,客户端可以记录在cookie里,只要sid不过期,就不用重复发送验证信息了。session就是提供这种机制的。

lz说的完全可以采用session机制来实现,当你发送请求时,在服务器端建立session,服务器处理完用户请求后,将sid发送给客户端,客户端可以记录在cookie里,只要sid不过期,就不用重复发送验证信息了。session就是提供这种机制的。


但是session机制怎样应用到webservice中呢?

在session中保留id

在session中保留id

还是不够清楚,和我说的通过“curl代理将验证传递的方式”有什么不同吗?

不用每次都传密码的,这样有安全隐患,可以用临时的token来解决

直接不启用cookies啦、  session啦 等类似的机制不行吗 ?

哎,PHP就是没有完善的东西呀。

web-services – Webservice和Enterprise Service Bus之间的区别

web-services – Webservice和Enterprise Service Bus之间的区别

我想知道Webservice和Enterprise Service Bus(Ex-Mule)之间的区别.当我搜索它时,我没有从互联网上获得太多信息.

根据我的理解,Enterprise Service Bus用于集成Service,以便任何其他应用程序可以使用和调用或集成. Web服务是Enterprise Service Bus中使用的方法之一.

解决方法

首先,一些一般术语:

服务是可以从外部消费应用程序调用的公开功能的通用术语.大多数情况下,服务是由应用程序的集成层公开的.服务可以是Web服务 – 基于SOAP,REST等,因此WebService是使用SOAP的服务子类型.

将所有应用程序相互连接不能很好地扩展(通信渠道随着向环境添加越来越多的应用程序而呈指数级增长),从长远来看,这会导致昂贵的维护.这就是为什么我们使用中间件软件(ESB是一种中间件)作为暴露应用程序服务的唯一点.

那么Service和ESB有什么区别?

ESB上的“直播”服务.它们通常代表特定的功能上下文 – 例如客户,订单的业务环境.因此,如果您需要获取客户信息,则不直接转到CRM应用程序,而是向提供此功能的ESB服务发送请求.因此,您无需了解CRM本身.

ESB在实践中是一个中间件(如果您愿意,它是集成主干),它提供了轻松托管和实现服务的技术基础架构和工具,包括:

>路由机制
>用于不同协议的连接器和桥接器
>不同活动的听众
>实现不同通信模型的手段
>数据和模型转换意味着
>异步排队
>监控,记录
>政策集中化
>等

使用中间件可以大大减少系统之间点对点连接的数量,并且还可以实现更好的隔离和低级别的耦合,这意味着当您需要实现更改,在供应商之间切换等时更具灵活性.

有关服务的更多信息,我将建议see this article.整个网站都很棒,您可能想要探索它.此外,您可以看到有用的representation of ESB as compound SOA design pattern,.

我们今天的关于WebService中的用户验证问题webservice 验证的分享已经告一段落,感谢您的关注,如果您想了解更多关于axis2实现webservice之使用services.xml文件发布WebService、PHP使用SOAP扩展实现WebService的方法 webservice视频教程 c# webservice php webservice、php写webservice,验证问题如何解决?、web-services – Webservice和Enterprise Service Bus之间的区别的相关信息,请在本站查询。

本文标签: