第三方登录之新浪微博登录_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 第三方登录之新浪微博登录

第三方登录之新浪微博登录

 2013/10/8 15:36:28  wangjie2013  程序员俱乐部  我要评论(0)
  • 摘要:lastmodified:2013-10-0813:38:41*********************************************开发之前的准备:开发应用的第一步是在这里申请AppKey,开放平台使用AppKey确定是哪个应用在请求API调用,所以请开发者申请了AppKey以后妥善保管AppKey和AppSecret(有了AppKey,我们就可以访问开放平台里的数据了)。具体流程请参考:应用开发流程第三方登录流程:简单来说就是访问连接:https://api.weibo
  • 标签:新浪 新浪微博 微博

? ? ?last modified:2013-10-08 13:38:41

? ? ?*********************************************

?

class="MsoNormal" style="text-indent: 21.0pt;">开发之前的准备:

开发应用的第一步是在这里申请AppKey,开放平台使用AppKey确定是哪个应用在请求API调用,所以请开发者申请了AppKey以后妥善保管AppKeyApp Secret(有了AppKey,我们就可以访问开放平台里的数据了)。 具体流程请参考:应用开发流程

?

?第三方登录流程:

?

???????? 简单来说就是访问连接:

?

https://api.weibo.com/oauth2/authorize?client_id=YOUR_CLIENT_ID&response_type=code&redirect_uri=YOUR_REGISTERED_REDIRECT_URI

?

其中:client_id:你申请的appKey

?

???????? ? redirect_uri:你的回调url

?

以上是两个主要的参数,也可以带上state(用于验证),scope(确定授权的的范围,通常为all)等。

?

???????? 访问以上连接后就会进入微博登录的引导页。在输入用户名和密码并登录成功后;浏览器就会重定向到你起初设定的redirect_uri,并携带一个参数,参数的namecode

?

???????? 形如:http://www.xxx.com/loginBySina?code=xxxxxxxxxxxxxx

?

???????? 获得了新浪返回的code值,我们就可以通过code获取AccessToken,通过AccessToken和新浪提供的接口,就可以访问该登录用户的信息了。

?

???????? 流程图:http://www.sinaimg.cn/blog/developer/wiki/oAuth2_02.gif

?

???????? 更多内容可以查看:

?http://open.weibo.com/wiki/%E6%8E%88%E6%9D%83%E6%9C%BA%E5%88%B6%E8%AF%B4%E6%98%8E

?

????????

?

使用java SDK进行开发:

?

???????? 各种版本SDK下载:http://open.weibo.com/wiki/SDK

?

???????? 我们选用java SDK完成一个简单的新浪微博第三方登录:

?

???????? 1,下载java SDK,下载以后是一个java工程,我们可以打成一个jar以供我们的项目使用,下面有我提供的jar以供下载。

?

? ? ? ? ?2,在项目的src目录下添加配置文件:config.properties

?

# sina weibo login configuration
# Last Modify : 2013-09-29 10:03:34
client_ID = xxxxxxxxx
client_SERCRET = xxxxxxxxxxxxxxxxxx
#下面填写你自己的回调URL
redirect_URI = http://www.xxxxx.com/login/loginBySinaWeibo.do

baseURL=https://api.weibo.com/2/
accessTokenURL=https://api.weibo.com/oauth2/access_token
authorizeURL=https://api.weibo.com/oauth2/authorize
rmURL=https://rm.api.weibo.com/2/

? ? ?3,获取code值:你可以在页面直接拼接相应的访问URL,也可以通过访问后台资源返回。

?

?

?????????????A,?通过访问后台资源返回:当客户端发送微博登陆的请求(/sinaWeibo)时,后台处理代码:

?

        @RequestMapping(value = "/sinaWeibo")
	@ResponseBody
	public String sinaWeibo() {
		String authorizationUrl = "";
		try {
			authorizationUrl = new Oauth().authorize("code", null, "all");
		} catch (WeiboException e) {
			log.error("获取sina微博code值失败!exception:{}", e.getMessage());
			e.printStackTrace();
		}
		return authorizationUrl;
	}

? ???? 通过ajax发送请求,返回authorizationUrl(新浪的登录引导页的URL),以上使用的是springMVC

通过js打开authorizationUrl就能进入引导页面:

<script type="text/javascript">
		$(function(){
			$("#sinaWeiboLogin").click(function(){
				$.getJSON(
                               "${pageContext.request.contextPath}/login/sinaWeibo.do",
                                function(data){
				     window.location.href = data;
				});
			 });
		});
</script>

?? ? ? ? ? ? B,?如果在页面直接拼接,只要符合这样的格式就可以:

?? //请求

? ? ? ?https://api.weibo.com/oauth2/authorize?client_id=123050457758183&redirect_uri=http://www.example.com/response&response_type=code

?

//同意授权后会重定向

? ? ? http://www.example.com/response&code=CODE

?

4,获取AccessToken值:

?

???????? 我的回调URI是:/login/loginBySinaWeibo.do;所以登录成功后会访问它。当访问该资源时,执行以下代码可以获取到AccessToken

?

Oauth oauth = new Oauth();
	AccessToken accessTokenObj = oauth.getAccessTokenByCode(code);
	String accessToken = accessTokenObj.getAccessToken();
	

? ? ? 5,获取用户当前登录用户的信息:

?

?

        //A,获取当前用户的uid:
	Account am = new Account();
	am.client.setToken(accessToken);
	JSONObject uidObj = am.getUid();
	String uid = uidObj.getString("uid");

	//B,获取当前用户信息:
	Users um = new Users();
	um.client.setToken(accessToken);
	User weiboUser = um.showUserById(uid);

	//C,以上weiboUser封装了当前用户的用户信息,例如:
	String gender = weiboUser.getGender();//获取性别
	String avatarLarge = weiboUser.getavatarLarge();//获取新浪微博头像
	String screenName = weiboUser.getScreenName();//获取新浪微博的微博名称
	//具体可以看一下SDK中User的源码,里面有注释

?

好了以上就可以获得用户在新浪的用户信息,一般用于web网站的快速注册功能,免去了用户重复填用户信息表单的时间,由web服务器自动从新浪微博服务器获取。

?

注意:

1,回调URL必须是你在新浪申请的网站域名下的URL,因为新浪对回调URL做了过滤,如果不是你在新浪开发者中申请的域名下的URL,新浪会提示URL匹配错误

?

2,如果是在开发阶段,可以通过修改本地的hosts文件,将申请的域名指向本机就可以了。

Hosts文件中加一句:

www.example.com ?localhost

这样该以后你的回调URL也得改一下:

www.example.com/(你的web工程名称)/login/loginBySinaWeibo.do

这样就不用将程序发布到线上也可以在本地测试了。

?

?

3,关于新浪提供的API大家可以参看javaSDK中的examples文件夹,里面的例子一看就明白了!

?

?

?

  • commons-httpclient-3.1.jar (297.9 KB)
  • 下载次数: 0
  • weibo4j-oauth2_sina.jar (1.8 MB)
  • 下载次数: 1
  • weibo4j-oauth2-beta2.1.1.zip (1.8 MB)
  • 下载次数: 0
发表评论
用户名: 匿名