文档章节

PHP WebService客户端验证

skq
 skq
发布于 2014/11/13 15:43
字数 243
阅读 993
收藏 5

Here's my solution to make SOAP-headers based authentication.

1). First of all we define the decorator class for our service class:

<?php

class SOAP_Service_Secure
{
    protected $class_name    = '';
    protected $authenticated = false;

    // -----

    public function __construct($class_name)
    {
        $this->class_name = $class_name;

    }

    public function AuthHeader($Header)
    {
        if($Header->username == 'foo' && $Header->password == 'bar')
            $this->authenticated = true;

    }

    public function __call($method_name, $arguments)
    {
        if(!method_exists($this->class_name, $method_name))
            throw new Exception('method not found');

        $this->checkAuth();

        return call_user_func_array(array($this->class_name, $method_name), $arguments);

    }

    // -----

    protected function checkAuth()
    {
        if(!$this->authenticated)
            HTML_Output::error(403);

    }

}
?>

 

2). Then we pass an instance of it to the SoapServer object.

<?php

    $Service = new SOAP_Service_Secure('My_Service');

    $Server = new SoapServer('my-service.wsdl');

    $Server->setObject($Service);

    $Server->handle();

?>

 

 

3). Implementing a client:

<?php

    $Client = new SoapClient('http://example.com/my-service.wsdl', array(
        'exceptions' => true
    ));
    
    // -----
    
    $AuthHeader = (object) array('username' => 'foo', 'password' => 'bar');
    
    $Headers[] = new SoapHeader('http://example.com', 'AuthHeader', $AuthHeader);
    
    $Client->__setSoapHeaders($Headers);
    
    // -----
    
    $Result = $Client->someMethod();

?>

 

非常不错!不过看的不是太明白,SOAP_Service_Secure->__call,好像跟 SosapClient->__call,有着关系?望高手指点

应该是在 SOAP_Service_Secure 中找不到 someMethod 方法时,就会调用 __call 方法.

本文转载自:http://php.net/manual/zh/soapserver.soapserver.php#108157

共有 人打赏支持
skq

skq

粉丝 10
博文 70
码字总数 11816
作品 0
武汉
私信 提问
紧急求助!关于手机客户端用httpclient访问服务端webservice怎么维持会话session

目前在做一个php的webservice供外部调用,客户端要先通过oauth的验证,然后我有一些信息是保存在session中的,现在碰到一个问题,就是i在java中发起测试请求的时候,在两次请求中没法维持会话...

yusaint
2011/11/23
2.8K
2
php该如何开发webservice

最近我们公司的平台要跟别家平台做数据交互,对方使用的是java开发的webservice,因为是有数据上的交互,所以双方都要做服务端,我们的平台是php开发的,所以就想着用php来开发webservice,虽...

封心
2015/10/14
1K
7
PHP提供了接口,Java客户端怎么写

PHP接口就是后面就是这样的....../www/index.php/Webservice/index; 而且服务端还有验证 private function server_check(){ if (!isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP......

无间道
2015/02/06
312
1
Webservice

最近系统集成经常调用webservice,都是用一些框架直接生成本地客户端代码,然后调用本地客户端方法,对webservice的的原理和基本实现并不清楚,前几天c#调用java端的webservice,因为涉及到h...

宿命panthers
2016/08/11
316
1
Delphi实现WebService带身份认证的数据传输

Delphi实现WebService带身份认证的数据传输 WebService使得不同开发工具开发出来的程序可以在网络连通的环境下相互通信,它最大的特点就是标准化(基于XML的一系列标准)带来的跨平台、跨开发...

vga
2014/11/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

rabbitMQ 在spring 的使用

一、准备工作 maven依赖 <dependency>  <groupId>com.rabbitmq</groupId>  <artifactId>amqp-client</artifactId>  <version>4.0.2</version></dependency> <dependency......

狼王黄师傅
昨天
1
0
Android JNI总结

0x01 JNI介绍 JNI是Java Native Interface的缩写,JNI不是Android专有的东西,它是从Java继承而来,但是在Android中,JNI的作用和重要性大大增强。 JNI在Android中起着连接Java和C/C++层的作...

天王盖地虎626
昨天
1
0
大数据教程(11.8)Hive1.2.2简介&初体验

上一篇文章分析了Hive1.2.2的安装,本节博主将分享Hive的体验&Hive服务端和客户端的使用方法。 一、Hive与hadoop直接的关系 Hive利用HDFS存储数据,利用MapReduce查询数据。 二、Hive与传统数...

em_aaron
昨天
3
0
跟我学Spring Cloud(Finchley版)-15-Hystrix监控详解

Hystrix提供了监控Hystrix Command的能力,本节来详细探讨。 监控端点与数据 应用整合Hystrix,同时应用包含spring-boot-starter-actuator 依赖,就会存在一个/actuator/hystrix.stream 端点...

周立_ITMuch
昨天
6
0
day26:shell题

1、 判断当前主机的CPU生产商,其信息在/proc/cpuinfo文件中vendor id一行中。 如果其生产商为AuthenticAMD,就显示其为AMD公司; 如果其生产商为GenuineIntel,就显示其为Intel公司; 否则,...

芬野de博客
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部