标签:
其实接入qq登录还是很简单的,但是你既然要做qq登录肯定你得网站要能够在外网访问的到,
因为qq在对你得网站授权之间会进行人工检查,检查你得图标摆放位置合不合理,网站是否违法等内容。
当你的网站能够在外网访问的时候 我们在qq开发者网站中申请网站的授权
用你的qq登录这个网站
在管理中心创建你的应用
创建应用的时候需要你填写一些网站的基本信息
如访问网址、登录成功后回调地址(也就是你处理登录请求的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
标签:
原文地址:http://www.cnblogs.com/jyyjava/p/5008536.html