码迷,mamicode.com
首页 > 编程语言 > 详细

java如何在网站中接入qq登录功能

时间:2015-11-30 23:47:05      阅读:232      评论:0      收藏:0      [点我收藏+]

标签:

其实接入qq登录还是很简单的,但是你既然要做qq登录肯定你得网站要能够在外网访问的到,

因为qq在对你得网站授权之间会进行人工检查,检查你得图标摆放位置合不合理,网站是否违法等内容。

 

当你的网站能够在外网访问的时候 我们在qq开发者网站中申请网站的授权

用你的qq登录这个网站

http://connect.qq.com/

在管理中心创建你的应用

创建应用的时候需要你填写一些网站的基本信息

如访问网址、登录成功后回调地址(也就是你处理登录请求的action)

腾讯会在request中封装qq验证后的信息转发到回调action中只用我们就可以在登录action中进行二次处理。

技术分享

 

 

 应用创建成功后,我们可以用自己的qq进行代码调试。

调试成功后申请上线,如果一切顺利一般当天可以得到审批结果(腾讯客服说的。。。但是我的网站还是扯了3天才批下来)

 

关于代码调试:

第一步:下载腾讯提供的sdk

http://wiki.connect.qq.com/sdk%E4%B8%8B%E8%BD%BD

第二步:在导入sdk包sdk4j.jar,

技术分享

第三步:修改配置文件qqconnectconfig.properties

 

app_ID = 101234444
app_KEY = c7205c6509eeda1482ce10cf17387c68
redirect_URI = http://www.exschools.com/servlet/qqlogin

  

这些信息在申请开发者后会在开发者的管理中心找到,填写你自己得token就可以了。

 

点击qq登录链接的action这样写,这里会自动跳转到qq的登录授权页面,用户自己登录qq后就会触发我们的回调地址

	
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
				try{	
					response.sendRedirect(new Oauth().getAuthorizeURL(request));
				} catch (QQConnectException e) {
					e.printStackTrace();
				}
	}

  

回调地址action

package cn;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.qq.connect.QQConnectException;
import com.qq.connect.api.OpenID;
import com.qq.connect.api.qzone.UserInfo;
import com.qq.connect.javabeans.AccessToken;
import com.qq.connect.javabeans.qzone.UserInfoBean;
import com.qq.connect.oauth.Oauth;

public class qqlogin extends HttpServlet {

	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws IOException {
		doPost(request, response);
	}

	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws IOException {
		response.setContentType("text/html; charset=utf-8");

		PrintWriter out = response.getWriter();

		try {
			AccessToken accessTokenObj = (new Oauth())
					.getAccessTokenByRequest(request);

			String accessToken = null, openID = null;
			long tokenExpireIn = 0L;

			if (accessTokenObj.getAccessToken().equals("")) {
				// 我们的网站被CSRF攻击了或者用户取消了授权
				// 做一些数据统计工作
				System.out.print("没有获取到响应参数");
			} else {
				accessToken = accessTokenObj.getAccessToken();
				tokenExpireIn = accessTokenObj.getExpireIn();

				request.getSession().setAttribute("demo_access_token",
						accessToken);
				request.getSession().setAttribute("demo_token_expirein",
						String.valueOf(tokenExpireIn));

				// 利用获取到的accessToken 去获取当前用的openid -------- start
				OpenID openIDObj = new OpenID(accessToken);
				openID = openIDObj.getUserOpenID();
				request.getSession().setAttribute("demo_openid", openID);

				// --------------------------------------------------------
				request.getSession().setAttribute("user", openID);
				UserInfo qzoneUserInfo = new UserInfo(accessToken, openID);
				UserInfoBean userInfoBean = qzoneUserInfo.getUserInfo();

				if (userInfoBean.getRet() == 0) {
					request.getSession().setAttribute("username",
							userInfoBean.getNickname());
					request.getSession().setAttribute("userphoto",
							userInfoBean.getAvatar().getAvatarURL100());
					response.sendRedirect("../index.jsp");
				} else {
					out.println("很抱歉,我们没能正确获取到您的信息,原因是: "
							+ userInfoBean.getMsg());
				}

			}
		} catch (QQConnectException e) {
		}
	}
}

  

这样就完成了整个的登录过程

当然在我的应用中只用到了sdk中很少的api如果你用更加复杂的操作可以在去查看腾讯提供的api

http://wiki.connect.qq.com/api%E5%88%97%E8%A1%A8

 

java如何在网站中接入qq登录功能

标签:

原文地址:http://www.cnblogs.com/jyyjava/p/5008536.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!