j2ee中实现QQ第三方登陆

标签: j2ee qq 方登 | 发表时间:2014-02-11 06:28 | 作者:qq245282209
出处:http://blog.csdn.net

最近接触了一些第三方登陆的东西,弄的真是一个头,两个大>.<

今天,终于把腾讯第三方登陆调试通了,做一个记录,顺便发发牢骚。

QQ互联官网: http://connect.qq.com/

申请之类的就不多说了,没什么难点,主要记录一下代码方面的东西。

看官方文档的时候写的太详细,太复杂了。看了一堆没用的,和误导的。

由于项目中用的是自定义的图标,所以没有用Js SDK(后来才知道好像官方的js SDK也可以自定义图标)

之前看的是

OAuth2.0开发指引

中的“开发攻略_Server-side”

光获取access_token就非了九牛二虎之力。

后来发现“开发攻略_Client-side”中的方法要简单的多。现在也没弄清楚为什么要分两个。

废话不多说,进入主题:

1. 打开浏览器,访问如下地址(请将client_id,redirect_uri,scope等 参数值替换为你自己的):

https://graph.qq.com/oauth2.0/authorize?response_type=token&client_id=[YOUR_APPID]&redirect_uri=[YOUR_REDIRECT_URI]&scope=[THE_SCOPE]


QQ登陆示例代码:

<a href="https://graph.qq.com/oauth2.0/authorize?response_type=token&client_id=101009536&redirect_uri=jishanjia.lanbaoo.com/login/bind&scope=get_user_info">腾讯QQ登录</a>

特别提示:
1. 请求时传入的recirect_uri必须与注册时填写的回调地址一致,用来进行第三方应用的身份验证。

2. 可通过js方法:window.location.hash来获取URL中#后的参数值,

授权成功后就跳转到recirect_uri这时就可以将?之前的路径换成本地环境,进行本地调试,

http://jishanjia.lanbaoo.com/login/bind?#access_token=F2B24AABBF5D69995C52D9007D1DBCE6&expires_in=7776000
换成

http://localhost:8088/mercy/login/bind?#access_token=F2B24AABBF5D69995C52D9007D1DBCE6&expires_in=7776000

expires_in=7776000应该是access_token的有效时间

然后用获取到的access_token获取OpenID

发送请求到如下地址(请将access_token等参数值替换为你自己的):

https://graph.qq.com/oauth2.0/me?access_token=YOUR_ACCESS_TOKEN

2. 获取到用户OpenID,返回包如下:

1
callback({"client_id":"YOUR_APPID","openid":"YOUR_OPENID"});

示例代码:

var accessToken = window.location.hash.substring(1);//获取路径中的access_token
	$.ajax({
		  type: 'GET',
		  url: 'https://graph.qq.com/oauth2.0/me?'+accessToken,
		  async: false,
		  dataType: "jsonp",
		  jsonp: "callback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(一般默认为:callback)
		  jsonpCallback:"callback",
		  success: function(o){
			  console.log(o);//o就是上面提到的返回包
			  $.ajax({
				  type: 'POST',
				  url:$CONFIG.base_url+"/third/qq/get_user_info",
				  data:{url: 'https://graph.qq.com/user/get_user_info?'+accessToken+'&oauth_consumer_key=101009536&openid='+o.openid},
				  async: false,
				  dataType: "json",
				  success: function(e){
					  alert(e.nickname);
					  console.log(e);
					  $("#userImg").attr("src",e.figureurl_qq_2);
				  }
			});
		  }
	});

获取到OpenID后就可以获取用户信息了(get_user_info)详情参照 api文档

获取user_info的时候jsonp就有点不对头了,虽然可以获取到,但是要报错,可能时jsonp用的不够熟练吧。然后我有采用后台获取用户信息的方式进行了一次中转。

代码如下:

@RequestMapping(value = "/qq/get_user_info", method = RequestMethod.POST)
	public ResponseEntity<HttpEntity> qqGetUserInfo(HttpServletRequest request) {

		String url = request.getParameter("url");
		System.out.println(url);
		HttpClient httpClient = new HttpClient();
		// 创建GET方法的实例
		GetMethod getMethod = new GetMethod(url);
		// 使用系统提供的默认的恢复策略
		getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
				new DefaultHttpMethodRetryHandler());
		try {
			// 执行getMethod
			int statusCode = httpClient.executeMethod(getMethod);
			if (statusCode != 200) {
				System.err.println("Method failed: "
						+ getMethod.getStatusLine());
			}
			// 读取内容
			byte[] responseBody = getMethod.getResponseBody();
			// 处理内容
			return new ResponseEntity(responseBody,HttpStatus.OK);
		} catch (HttpException e) {
			// 发生致命的异常,可能是协议不对或者返回的内容有问题
			System.out.println();
			e.printStackTrace();
			return new ResponseEntity("Please check your provided http address!",HttpStatus.BAD_REQUEST);
		} catch (IOException e) {
			// 发生网络异常
			e.printStackTrace();
			return new ResponseEntity("Time out!",HttpStatus.BAD_GATEWAY);
		} finally {
			// 释放连接
			getMethod.releaseConnection();
		}
		
	}

这样一次QQ登陆然后获取用户信息就完成了。


Zemo手打,转载标明出处:http://blog.csdn.net/zemochen/article/details/19049357

参考文档: QQ互联文档资料

                 jsonp跨域访问

                 http://www.ibm.com/developerworks/cn/opensource/os-httpclient/





作者:qq245282209 发表于2014-2-10 22:28:37 原文链接
阅读:101 评论:0 查看评论

相关 [j2ee qq 方登] 推荐:

j2ee中实现QQ第三方登陆

- - CSDN博客Web前端推荐文章
最近接触了一些第三方登陆的东西,弄的真是一个头,两个大>.<. 今天,终于把腾讯第三方登陆调试通了,做一个记录,顺便发发牢骚. QQ互联官网: http://connect.qq.com/. 申请之类的就不多说了,没什么难点,主要记录一下代码方面的东西. 看官方文档的时候写的太详细,太复杂了. 由于项目中用的是自定义的图标,所以没有用Js SDK(后来才知道好像官方的js SDK也可以自定义图标).

J2EE面试整理

- - 研发管理 - ITeye博客
1 web.xml加载顺序:.   相同位置的过滤器,一般按照 filter-mapping的顺序过滤,所以 编码过滤器 一般放在最前面. 2 struts2的工作流程. (1)客户端提交一个HttpServletRequest请求(.action或JSP页面). (2)请求被提交到一系列Filter过滤器,如ActionCleanUp和FilterDispatcher等.

揭开J2EE集群的面纱

- - 企业架构 - ITeye博客
[转载自] http://bbs.51cto.com/thread-35850-1-1.html . 越来越多的关键任务和大型应用正运行在J2EE平台上,象银行之类的应用要求很高的可用性(HA),大型系统比如google和Yahoo则要求更好的伸缩性. 今天高可用性和伸缩性的重要性对于互联世界日益增长,最著名的证明是1999年eBay中断了22小时的服务,原因是超过230万次的拍卖,最终导致eBay股票下跌了9.2个百分点.

J2EE领域的一些常见的技术框架结构图

- - CSDN博客推荐文章
        Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的. 框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为J2EE 应用程序开发提供集成的框架. Spring 框架的功能可以用在任何J2EE 服务器中,大多数功能也适用于不受管理的环境. Spring 的核心要点是:支持不绑定到特定J2EE 服务的可重用业务和数据访问对象.

J2EE事务并发控制策略总结

- - 开源软件 - ITeye博客
本文结合hibernate以及JPA标准,对J2EE当前持久层设计所遇到的几个问题进行总结:. 第一:事务并发访问控制策略. 当前J2EE项目中,面临的一个共同问题就是如果控制事务的并发访问,虽然有些持久层框架已经为我们做了很多工作,但是理解原理,对于我们开发来说还是很有用处的. 事务并发访问主要可以分为两类,分别是同一个系统事务和跨事务访问的并发访问控制,其中同一个系统事务可以采取乐观锁以及悲观锁策略,而跨多个系统事务时则需要乐观离线锁和悲观离线锁.

QQ表情 for iPad

- 小趴 八足趴 八足 ramener - 腾讯CDC
  QQ HD for iPad 2.2已经发布了~其中全新的高清QQ表情也跟大家见面了.   在这里奉上新表情的安装包同时还有赠品哟亲~.   QQ HD for iPad 2.2 表情菜单效果图.   QQ表情for iPad.   表情安装包在附件中~希望大家喜欢~.   QQ HD for iPad 2.2 表情安装包 下载.

Mac QQ V1.1.1 发布

- KNocTis - cnBeta.COM
1.解决发图片视频崩溃问题;2.修正部分用户反馈bug;3.支持10.5系统下的视频;. 4.大幅优化各个环节的资源使用. 新增视频功能、自定义表情、讨论组、代理登陆等功能.

国内观光:360 PK QQ

- Will - 煎蛋
# sein:我就出差一天,在宾馆打开新浪微博后听说这个事情无比震惊. 网易专题:360决战腾讯QQ. 新浪微薄话题:360~腾讯~qq. update / 几篇重量级评论. Keso:丛林时代怎样做老大. @腾讯公司:《致广大QQ用户的一封信》当您看到这封信时,我们刚刚作出了一个非常艰难的决定. 在360公司停止对QQ进行外挂侵犯和恶意诋毁之前,我们决定将在装有 360软件的电脑上停止运行QQ软件.

班级QQ群变迁

- Deco - cnBeta.COM
A:各位同窗,我被公司派到无锡,搞一个地铁项目,手机号是134××××××××,请惠存. B:各位亲朋好友,我现驻扎首都,已成功打进公司内部,在做一个大项目,好几个亿. C:各位兄弟姐妹,我过一个月要出国了,公司在美国有个项目,我要过去组织施工,我会想你们的,同时我会好好欣赏那边的美女.

QQ新选择,CreQQ:QQ for chrome

- Tony - UbuntuSoft
CreQQ是一个Chrome扩展:. 支持了默认表情、可以显示好友头像、获取好友在线状态成功、更改了登录窗口、添加了注销功能、登录过程中的取消功能和删除聊天记录功能. 比较遗憾地是依然不支持自定义表情、不支持群功能,另外注销和取消功能可能还有些小问题,不过这已经不影响正常使用了. 作者博客:http://sneezry.com.