java中java qq第三方登录录如何检测到桌面的账号

java web项目调用QQ第三方登录接口并绑定账号出错,请大神帮我看看是哪里出的错!
[问题点数:40分]
本版专家分:0
结帖率 50%
CSDN今日推荐
匿名用户不能发表回复!|
CSDN今日推荐急~~~!Java web项目如何添加第三方QQ登录支持?
[问题点数:100分,结帖人SCJ_CSDN]
本版专家分:0
结帖率 100%
CSDN今日推荐
本版专家分:1826
结帖率 96.97%
本版专家分:256
本版专家分:2362
本版专家分:72
本版专家分:0
结帖率 100%
本版专家分:0
结帖率 100%
本版专家分:157
本版专家分:13426
匿名用户不能发表回复!|
CSDN今日推荐java第三方登录(微博,QQ)详细代码
第三方登录,首先需要设计扩展性的表结构。参照如下:本文主要写第三方登录的代码。
  浅谈数据库用户设计:http://www.cnblogs.com/jiqing9006/p/5937733.html
  可绑定可扩展的账号系统:http://blog.cocosdever.com//The-design-principle-and-implementation-of-extensible-account-system-1/
第三方登录流程是:先获取code----&然后获取access_token-----&根据token获取用户信息。
前台页面实现步骤:点击微博登录按钮----&打开一个子窗口,进行授权------&授权完成,跳转到首页或上次浏览的页面。
1、写第三方登录的按钮,点击按钮时,打开一个子窗口。
redirect_uri是你在微博上设置的回调地址。
&%@ page language="java" import="java.util.*" pageEncoding="utf-8"%&
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
&!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&
&title&My JSP 'index.jsp' starting page&/title&
&meta http-equiv="pragma" content="no-cache"&
&meta http-equiv="cache-control" content="no-cache"&
&meta http-equiv="expires" content="0"&
&meta http-equiv="keywords" content="keyword1,keyword2,keyword3"&
&meta http-equiv="description" content="This is my page"&
&script type="text/javascript" src="http://statics.2cto.com/js/jquery.min.js"&&/script&
&script type="text/javascript"&
var qqAuthWin,weiboAuthW
* 关闭QQ子窗口
function closeQQWin(){
var result = $("#qq").val();
if(result != ""){
console.log(result);
qqAuthWin.close();
console.log("值为空");
* http://localhost:9090/logback/qq.jsp
QQ互联上设置的回调地址
function loginQQ(){
qqAuthWin = window.open("https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=CLIENT_ID&state=register&redirect_uri=http://localhost:9090/logback/qq.jsp",
'QQ授权登录','width=770,height=600,menubar=0,scrollbars=1,'+
'resizable=1,status=1,titlebar=0,toolbar=0,location=1');
* 关闭微博子窗口
function closeWeiboWin(){
var result = $("#weibo").val();
if(result != ""){
console.log(result);
weiboAuthWin.close();
console.log("值为空");
* 微博登录
* http://localhost:9090/logback/weibo.jsp这个就是在微博上设置的回调地址
function loginWeibo(){
weiboAuthWin = window.open("https://api.weibo.com/oauth2/authorize?client_id=CLIENT_ID&response_type=code&state=register&redirect_uri=http://localhost:9090/logback/weibo.jsp",
'微博授权登录','width=770,height=600,menubar=0,scrollbars=1,'+
'resizable=1,status=1,titlebar=0,toolbar=0,location=1');
&input type="hidden" id="qq" value=""&
href="#" onClick="loginQQ()"&QQ登录&/a&
&input type="hidden" id="weibo" value=""&
&a href="#" onClick="loginWeibo()"&微博登录&/a&
&/html&2、回调地址页(qq.jsp、weibo.jsp)&%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%&
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
String code = request.getParameter("code");//获取QQ返回的code
String state = request.getParameter("state");
&!DOCTYPE HTML&
&base href="&%=basePath%&"&
&title&My JSP 'weibo.jsp' starting page&/title&
&meta http-equiv="pragma" content="no-cache"&
&meta http-equiv="cache-control" content="no-cache"&
&meta http-equiv="expires" content="0"&
&meta http-equiv="keywords" content="keyword1,keyword2,keyword3"&
&meta http-equiv="description" content="This is my page"&
&script type="text/javascript" src="http://statics.2cto.com/js/jquery.min.js"&&/script&
$(function(){
var code = "&%=code%&";
var state = "&%=state%&";
url:"http://localhost:8080/cms_manage/api/qqLogin",
type:"post",
data:{code:code,state:state},
dataType:"json",
success:function(result){
result = JSON.stringify(result);
console.log(result);
//把返回的数据传给父窗口的隐藏域中
window.opener.document.getElementById("qq").value =
//授权完成后,关闭子窗口
window.opener.closeQQWin();
登录成功。
&/html&qq.jsp和weibo,jsp是一样的。。。3、java代码/**
* 微博第三方登录
* @author techbuddy
@Controller
public class WeiboLoginController {
private Logger logger = Logger.getLogger(WeiboLoginController.class);
private final static String CLIENT_ID = "";
private final static String CLIENT_SERCRET = "";
private final static String GET_TOKEN_URL = "https://api.weibo.com/oauth2/access_token";
private final static String REDIRECT_URI = "http://localhost:9090/logback/weibo.jsp";
private final static String GET_USER_INFO = "https://api.weibo.com/2/users/show.json";
private final static String GET_TOKEN_INFO_URL = "https://api.weibo.com/oauth2/get_token_info";
private final static String STATE = "register";
@RequestMapping(value="/api/weiboLogin",method=RequestMethod.POST)
@ResponseBody
public CMS_Result weiboLogin(HttpServletRequest request,HttpServletResponse response){
CMS_Result result =
String error_code = request.getParameter("error_code");
if(StringUtils.isNotBlank(error_code)){
result = CMS_Result.bulid("5001", "微博授权失败");
//获取code
String code = request.getParameter("code");
logger.info("code:" + code);
//获取state
String state = request.getParameter("state");
logger.info("state:"+state);
String access_token = "";
String expires_in = "";
String uid = "";
if(STATE.equals(state)){
//获取token
JSONObject token = getAccessToken(code);
access_token = token.getString("access_token");
uid = token.getString("uid");
expires_in = String.valueOf(token.getInt("expires_in"));
logger.info("token:"+token);
result = CMS_Result.bulid("5001", "微博授权失败");
//查询该用户信息
OauthUser oauthUser = oauthUserService.findWeiboByIdentifier(uid);
Master master =
if(oauthUser != null){
master = masterInfoDao.findById(oauthUser.getMaster_id());
//获取用户信息
JSONObject userInfo = getUserInfo(access_token, uid);
logger.info("用户信息"+userInfo);
String nickname = userInfo.getString("screen_name");
String profile_image_url = userInfo.getString("profile_image_url");
String gender = "f".equals(userInfo.getString("gender"))?"1":"0";
//向第三方登录表中添加数据
OauthUser user = new OauthUser();
user.setId(UUID.randomUUID().toString());
String master_id = UUID.randomUUID().toString();
user.setMaster_id(master_id);
user.setIdentity_type("weibo");
user.setIdentifier(uid);
user.setCredential(access_token);
user.setExpires_in(expires_in);
user.setStatus("0");
oauthUserService.insert(user);
//向用户表中添加默认数据
Master masterUser = new Master();
masterUser.setId(master_id);
masterUser.setNickname(nickname);
masterUser.setHead_portrait(profile_image_url);
masterUser.setSex(gender);
//由于第三方登录没有用户名密码,而且该字段在数据库中不为空,在此设置默认用户名密码
masterUser.setUser_name("wbu"+access_token.substring(0, 9));
masterUser.setPassword("wbp"+access_token.substring(0, 9));
masterInfoService.insertDefault(masterUser);
master = masterU
result = CMS_Result.ok();
}catch (Exception e) {
e.printStackTrace();
result = CMS_Result.bulid("5001", "登录失败");
* 获取AccessToken
private JSONObject getAccessToken(String code) {
StringBuilder sb = new StringBuilder();
sb.append("grant_type=authorization_code");
sb.append("&client_id=" + CLIENT_ID);
sb.append("&client_secret=" + CLIENT_SERCRET);
sb.append("&redirect_uri=" + REDIRECT_URI);
sb.append("&code=" + code);
String result = HttpsUtil.post(GET_TOKEN_URL,sb.toString());
* 返回数据
"access_token": "ACCESS_TOKEN",
"expires_in": 1234,
"remind_in":"798114",
JSONObject json = new JSONObject(result);
* 获取用户信息
* @param access_token
* @param uid 查询的用户ID
private JSONObject getUserInfo(String access_token,String uid){
StringBuilder sb = new StringBuilder();
sb.append("?access_token=" + access_token);
sb.append("&uid=" + uid);
String result = HttpsUtil.get(GET_USER_INFO+sb.toString());
//返回参数:查看http://open.weibo.com/wiki/2/users/show
JSONObject json = new JSONObject(result);
扫码向博主提问
非学,无以致疑;非问,无以广识
擅长领域:
没有更多推荐了,如何用java语言实现自动登录桌面客户端,比如QQ,新浪微博桌面客户端等
<a data-traceid="question_detail_above_text_l&&
最近在做一个统一认证系统,在不能改变已有C/S结构的业务系统的代码的前提下,通过配置实现自动登录这些业务系统的功能,现在卡在如何用java语言实现自动登录桌面客户端的这个环节上了,请高人指点一下
Java的Process类启动进程。
--- 共有 4 条评论 ---
: 正在试验,感觉可行
: JNI+键盘钩子
搞清楚底层通讯协议,比如是TCP/IP,然后模拟发送数据?...
如何将配置好的用户名和密码传值,自动登录呢
封装下autoitx
吧数据存到本地,起来数据读出来,在直接调用那些处理事件的方法不就玩了。
你可以用httpclient 实现web qq和web来登录 其他方法还真不知道 或者发新浪微博和读取微博 可以调用他们各自相应得api也可以!qq 第三方登录 java sdk怎么用_百度知道
qq 第三方登录 java sdk怎么用
我有更好的答案
导入相关的jar包到你的项目里,剩下就是自己看api文档,结合自己的项目使用。
神码性能测试工程师
方法/步骤准备工作在正式接入之前你需要了解以下名词的含义:1. appid&:应用的唯一标识。在OAuth2.0认证过程中,appid的值即为oauth_consumer_key的值。2. appkey:appid对应的密钥,访问用户资源时用来验证应用的合法性。在OAuth2.0认证过程中,appkey的值即为oauth_consumer_secret的值。3. redirecturl:成功授权后的回调地址,必须是注册appid时填写的主域名下的地址,建议设置为网站首页或网站的用户中心。注意需要将url进行URLEncode。4. access token:用来判断用户在本网站上的登录状态,具有3个月有效期,用户再次登录时自动刷新。5. openid:是此网站上唯一对应用户身份的标识,网站可将此ID进行存储便于用户下次登录时辨识其身份,或将其与用户在网站上的原有帐号进行绑定。第一步要接入QQ登录,必不可少的是appid和appkey,通过申请接入QQ登录,按照相应步骤操作即可轻松获得,在此不做赘述。第二步在需要放置QQ登录按钮的页面加入下面SCRIPT代码:&script&type=&text/javascript&&src=&PS:APPID&和&REDIRECTURI&换成第一步申请所得到的对应内容,REDIRECTURI&就是登录之后返回的回调地址,在申请页面自己填写,一般写网站主域名即可。注意:回调地址必须以http或https开头。第三步在页面放置一个元素节点用来展现登录按钮,并且指定其ID,如:&div id=&qq&&&/div&然后在页面加入如下SCRIPT:&script&type=&text/javascript&&&&&&QC.Login({&&&&&&&btnId:&qq&&&&&//插入按钮的节点id});&/script&这时就可以在页面看到如下效果:如对这个展示效果不满意,也可以自定义登录按钮。第四步在 &REDIRECTURI&即回调地址页面加入如下SCRIPT:&script&type=&text/javascript&src=&另外:官方说法如果回调地址页与加入QQ登录按钮是同一个页面,则只需要引用一次脚本文件。如果理解不了这种官方说法,可以在第一步的脚本中加入data-callback=&true&属性,而忽略第四步,前提是回调地址页与加入QQ登录按钮的页面是同一个页面。第五步因为JS SDK封装了获取Access Token以及OpenID的方法,因此开发者不需要用开发代码进行获取,直接调用QQ登录OpenAPI即可。调用OpenAPI时,请统一遵循下述调用方式:QC.api(api,&paras,&fmt,&method)参数说明:最后提供一种代码接入思路,仅供参考:QC.api(&get_user_info&, {}) //get_user_info是API参数//指定接口访问成功的接收函数,s为成功返回Response对象& & & &.success(function (s) {& & & & & &//成功回调,通过s.data获取OpenAPI的返回数据& & & & & &nick = s.data. //获得昵称& & & & & &headurl = s.data.figureurl_qq_1; //获得头像& & & & & &if (QC.Login.check()) {//判断是否登录& & & & & & & &QC.Login.getMe(function (openId, accessToken) { //这里可以得到openId和accessToken& & & & & & & & & &//下面可以调用自己的保存方法& & & & & & & & & &……& & & & & & & &});& & & & & &}& & & &})//指定接口访问失败的接收函数,f为失败返回Response对象& & & &.error(function (f) {& & & & & &//失败回调& & & & & &alert(&获取用户信息失败!&);& & & &});& &////指定接口完成请求后的接收函数,c为完成请求返回Response对象& &//.complete(function (c) {& &// & &//完成请求回调& &// & &alert(&获取用户信息完成!&);& &//});
为您推荐:
其他类似问题
您可能关注的内容
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 google第三方登录java 的文章

 

随机推荐