根据Oauth协议用JAVA来实现qq互联登录



        首先声明下,看了很多WEB都有QQ快捷登录这个功能,心里痒痒的,也想尝试下,由于小弟才学习JAVA不久,官方的SDK看的不是很明了,所以用原生态协议一步一步调用腾讯的接口来实现qq互联登录,功能是实现了,但在过程中有不足之处,想要完善的同学自己拿去修改.


      ->使用到的jar包我给大家贴出来

                1.commons-beanutils-1.7.0.jar

                2.commons-collections-3.1.jar

                3.commons-lang-2.5.jar

                4.commons-logging-api-1.1.jar

                5.commons-logging.jar

                6.ezmorph-1.0.3.jar

                7.httpclient-4.1.3.jar

                8.httpcore-4.4.jar

                9.json-lib-2.1-jdk15.jar

      -> 环境那些就不再啰嗦了,直接上菜


        -->   servlet代码(开发中应该把token存入数据库)

               //开发者key
		String key="xxxxxxxxxxx";
		//开发者密码
		String pw = "xxxxxxxxxxxxxx";
		String code = "";
		String token = "";
		String openid = "";
		String userInfo = "";
		code = req.getParameter("code");
		
		//获取用户token
		String tokenUrl = "https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&client_id="+key+"&client_secret="+pw+"&code="+code+"&redirect_uri=http%3a%2f%2fqiannew.nat123.net%2fthirdLogin";
		token = HttpUtils.instance.getHttpResponse(tokenUrl).split("&")[0].split("=")[1];
		//获取用户openid
		String openidUrl = "https://graph.qq.com/oauth2.0/me?access_token="+token+"";
		openid =  HttpUtils.instance.getHttpResponse(openidUrl).substring(45, 77);
		//获取用户信息
		String userInfoUrl = "https://graph.qq.com/user/get_user_info?access_token="+token+"&oauth_consumer_key=101180012&openid="+openid+"";
		userInfo = HttpUtils.instance.getHttpResponse(userInfoUrl);
		JSONObject o = JSONObject.fromObject(userInfo);
		Map<String,Object> map = (Map)o;
		req.setAttribute("userinfo", map);
		req.getRequestDispatcher("/index.jsp").forward(req, resp);</span>
            --->工具类代码
                
<span style="font-size:14px;">public enum HttpUtils {
	instance;
	public String getHttpResponse(String url)  {
		String res = "";
		try {
			HttpGet  tokenRequest = new HttpGet(url);
			HttpResponse tokenHttpResponse = new DefaultHttpClient().execute(tokenRequest); 
			if(tokenHttpResponse.getStatusLine().getStatusCode() == 200){
				 res  = EntityUtils.toString(tokenHttpResponse.getEntity());
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		return res;
	}
}</span>

          -->登录界面代码

     

<span style="font-size:14px;"><%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<meta property="qc:admins" content="1466422611665766141236654" />
</head>
<body>
<a href="http://openapi.qzone.qq.com/oauth/show?which=ConfirmPage&display=pc&response_type=code&client_id=xxxxxx&redirect_uri=(格式化过后的回调地址)&state=test">QQ登录</a>
<br/>
<br/>
<br/>
${userinfo}
</body>
</html>




最后返回结果如图






  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值