文档章节

PHP WebService客户端验证

skq
 skq
发布于 2014/11/13 15:43
字数 243
阅读 986
收藏 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['PHPAUTHUSER']) || !isset($SERVER['PHP_AUT......

无间道
2015/02/06
310
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

没有更多内容

加载失败,请刷新页面

加载更多

降压变换器 Buck

特点 输入输出极性相同。 工作过程 在 MOS 导通时,输入电源通过 L 和 C 滤波后向负载端提供电流;当 MOS 断开后,L 通过二极管续流,保持负载电流连续。输出电压因为占空比的作用,不会超过...

colinux
今天
1
0
Apache日志不记录访问静态文件,访问日志切割,静态元素过期时间设置

Apache配置不记录访问静态文件的日志 网站大多元素为静态文件,如图片、css、js等,这些元素可以不用记录 vhost原始配置 <VirtualHost *:80> ServerAdmin test@163.com DocumentRoo...

野雪球
今天
3
0
聊聊storm的ICommitterTridentSpout

序 本文主要研究一下storm的ICommitterTridentSpout ICommitterTridentSpout storm-core-1.2.2-sources.jar!/org/apache/storm/trident/spout/ICommitterTridentSpout.java public interface......

go4it
今天
4
0
Ubuntu常用操作

查看端口号 netstat -anp |grep 端口号 查看已使用端口情况 netstat -nultp(此处不用加端口号) netstat -anp |grep 82查看82端口的使用情况 查找被占用的端口: netstat -tln netstat -tl...

hc321
昨天
3
0
网站cdn的静态资源突然访问变的缓慢,问题排查流程

1.首先我查看了一下是否自己的网络问题,通过对比其他资源的访问速度和下载速度,确认不是 2.通过ping 和 tracert 判断cdn域名能否正常访问,(最后回想感觉这一步可以省略,因为每次最终能访...

小海bug
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部