这个是一个Github上的开源项目-Signpost,主要封装了一些OAuth认证类的方法,项目地址:电极打开

Signpost

什么是Signpost

Signpost是一种非常容易、直观的HTTP信息签名解决方案,符合OAuth核心1.0a标准,当前应用在java平台上,Signpost遵循模块和灵活的设计,使您可以将其与不同的
HTTP消息传递层相结合,单击此处可以查看受支持的HTTP库列表。

Signpost的目标

Signpost设计目标基于以下的一些原则性:

1.简化

Signpost使用起来你会发现它非常的简单,所有动作的执行都仅仅需要几行的代码即可实现。比如,下面就是演示你如何用Signpost给一个标准的java HTTP 信息签名

  1. // create an HTTP request to a protected resource
  2. URL url = new URL("http://api.example.com/protected")
  3. HttpURLConnection request = (HttpURLConnection) url.openConnection();
  4.  
  5. // sign the request (consumer is a Signpost DefaultOAuthConsumer)
  6. consumer.sign(request);
  7.  
  8. // send the request
  9. request.connect();

Signpost基于两个目标提供了一个简约的API :签名HTTP信息和从一个OAuth service提供者获取请求令牌。Everything else is beyond the scope of the OAuth specification, and is thus left to the HTTP messaging layer, where it belongs.(这个翻译不了)

需要参考更多详细的例子,请参考这里

Unobtrusiveness

Signpost尽可能的不高调(unobtrusive),与其他的项目实现不同,Signpost不包含整个HTTP层并且隐藏它的客户端功能。相反,你仅仅需要传递一个HttpRequest对象给它,然后Signpost将会使用它已经配置的凭据对信息进行签名。

这意味着所有底层HTTP引擎的强大功能和灵活性仍然在你的指尖。

模块化

自从1.1版本以后,Signpost进行了模块化。除了那些你必须的核心模块,你可以现在下载额外的模块来支持其他HTTP签名库而不仅仅是那个跟标准的Java平台的附件模块。

除了HttpURLConnection,当前Signpost也包含Apache Commons HTTP版本4模块和Jetty HTTP Client版本6。

局限

Signpost努力试着成为一个简单的库。为了减少API和实现方式的复杂性,Signpost当前不会支持一下事情:

*当前不支持使用公共密钥加密的信息签名。但是,使用PLAINTEXT和HMAC-SHA1加密方法的信息签名是支持的。

*从WWW-Authenticate的标头字段写入OAuth协议参数

我相信即使有这些限制的地方,Signpost将为广大的用户工作。交易很少用于更简单的功能和易用性是一个设计决定。如果不适合您的设置工作,Signpost很可能不是您的最佳选择。

线程安全性

Signpost是非安全性的线程并且可能永远也不会。Signpost对象是非常轻量级,所以你必须在你的必须要发送的签名的HTTP请求的程序中为每一个线程创建一个OAuthConsumer和OAuthProvider。这两个对象也是可序列化的,因此你可以坚持和以后还原他们。

Google Android

注意:在android实现不要使用DefaultOAuth,因为在安卓系统的java.net.HttpURLConnection有一个bug,它阻止了与一些service provider进行工作。Instead,使用CommonsHttpOAuth类。

Signpost已经用在使用在需要android程序上,以及谷歌的软件协议栈的移动设备。

A light-weight client-side OAuth library for Java的更多相关文章

  1. 网络爬虫2--PHP/CURL库(client URL Request Library)

    PHP/CURL库功能   多种传输协议.CURL(client URL Request Library),含义是“客户端URL请求库”. 不像上一篇所用的PHP内置网络函数,PHP/CURL支持多种 ...

  2. lwip Light Weight (轻型)IP协议

    wip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈. 外文名 lwip 开发者 瑞典计算机科学院 说    明 Light Weight (轻型)I ...

  3. Virtual servers on a Raspberry Pi with the light weight OS virtualization system Docker!

    转自:http://www.hyggeit.dk/2014/02/virtual-servers-on-raspberry-pi-with.html Virtual servers on a Rasp ...

  4. Eclipse报错 due to restriction on required library C:/Java/jdk1.7.51/jre/lib/rt.jar 解决方案

    Eclipse报错 due to restriction on required library C:/Java/jdk1.6.0_10/jre/lib/rt.jar 解决方案 Eclipse 编译时 ...

  5. spring .cloud ------------java.lang.RuntimeException: com.netflix.client.ClientException,Caused by: java.lang.IllegalArgumentException: MIME type may not contain reserved characters

    1.问题的发生 Feign在默认情况下使用的是JDK原生的URLConnection发送HTTP请求,没有连接池,但是对每个地址会保持一个长连接,即利用HTTP的persistence connect ...

  6. no jpeg in java.library.path;java.lang.NoClassDefFoundError: Could not initialize class sun.awt.image.codec.JPEGImageEncoderImpl

    no jpeg in java.library.path;java.lang.NoClassDefFoundError: Could not initialize class sun.awt.imag ...

  7. com.rabbitmq.client.impl.Frame.readFrom(Frame.java:95)

    RabbitMQ 基于Erlang 实现, 客户端可以用Python | Java | Ruby | PHP | C# | Javascript | Go等语言来实现.这里做个java语言的测试.首先 ...

  8. TCP/UDP client/server library for Java, 最好的java语言tcp udp 服务器客户端实现库

    这个库andrdoi也可以用,而且是基于类的使用方式: 它支持类似聊天室的功能,即一个人说话,所有客户端都能收到,当然也支持点点通信.它还支持 RMI 的方式调用远程过程. https://githu ...

  9. lwIP(Light Weight IP)协议

    信号量 信号量结构体:struct sys_semt struct _sys_sem { void *sem; };  err_t sys_sem_new(sys_sem_t *sem, u8_t c ...

随机推荐

  1. 18_andriod常用布局&内容回顾

    线性布局: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:androi ...

  2. AngularJs(Part 9)--AngularJS 表单

    AngularJS 表单     AngularJS使用了MVX的结构,我们可以是传统的表单更加强大.比如过去我们得自己写一大堆验证,比过过去我们得自己转换用户的输入, 现在这些工作全部可以交给Ang ...

  3. 1、转载 bwa的使用方法

    http://bio-bwa.sourceforge.net/bwa.shtml http://www.plob.org/?p=25 bwa的使用需要两中输入文件: Reference genome ...

  4. Python及R安装包版本查看方法

    R包查询 查询已安装的所有的包:library() 或installed.packages()(括号内为空,区别以上两项) 查询具体包的信息: help(package="pheatmap& ...

  5. 高性能服务器设计(Jeff Darcy's notes on high-performance server design

    高性能服务器设计(Jeff Darcy's notes on high-performance server design 我想通过这篇文章跟大家共享一下我多年来怎样开发“服务器”这类应用的一些想法和 ...

  6. Java异常处理的10个最佳实践

    本文作者: ImportNew - 挖坑的张师傅 未经许可,禁止转载! 异常处理在编写健壮的 Java 应用中扮演着非常重要的角色.异常处理并不是功能性需求,它需要优雅地处理任何错误情况,比如资源不可 ...

  7. 网页设计与开发:HTML、CSS、JavaScript实例教程 (郑娅峰) pdf扫描版

    网页设计与开发:HTML.CSS.JavaScript实例教程从实用角度出发,详细讲解了HTML.CSS和JavaScript的基本语法和设计技巧,通过一个实用的班级网站的规划.设计.实现到发布过程, ...

  8. CentOS6.5内核升级FATAL: Module scsi_wait_scan not found

    系统为CentOS6.5的虚拟机内核升级至版本4.6.0-1,重启后,报以下错误: Module scsi_wait_scan not found. 无法进入系统. 问题描述详见:Known Issu ...

  9. JavaScript中匿名函数循环传参数(不触发函数的执行)

    我们都知道定义函数的方式有两种,一种是函数声明,另一种是函数表达式,函数声明的语法是这样的: function functionName(arg0, arg1, arg2) { // 函数体 } 函数 ...

  10. 在eclipse中打开文件所在的目录

    eclipse中默认是不能直接打开文件所在的目录的,需要在文件中右键-->properties-->location,复制到资源管理器中才能打开文件所在的目录.这种方法很麻烦.这里介绍一种 ...