Java实现QQ登录

写了一个个人网站,增加一个登录的地方,自己写登录太麻烦,而且用户一般也不愿意去登录,接入QQ互联,实现QQ一键登录。所有前提是你得有一个IP地址和域名。
==ps:==用处不大,主要是写着玩

1 进入qq互联官网进入点击头像个创建提交申请

2 选择个人接入,按照步骤填写注册资料
创建成功通过后会哦显示接入的个人信息。

3 审核成功后点击下面的开始创建,按步骤完成创建过程。

4 创建成功后可以查看APP IDAPP key,很重要

在应用管理界面可以查看如上信息,点击查看就可以看到如下关键信息。

往下划在平台信息里可以看到网站地址和网站回调域,回调域一般是`@requestMapping()``中写的请求地址

5 登录页面

<a href"/login">qq登录</a>

6 配置qqconnectconfig.properties,与application.properties同一级

app_ID = 你的App ID
app_KEY = 你的App key
redirect_URI = 你的回调域
scope = get_user_info,add_topic,add_one_blog,add_album,upload_pic,list_album,add_share,check_page_fans,add_t,add_pic_t,del_t,get_repost_list,get_info,get_other_info,get_fanslist,get_idollist,add_idol,del_ido,get_tenpay_addr
baseURL = https://graph.qq.com/
getUserInfoURL = https://graph.qq.com/user/get_user_info
accessTokenURL = https://graph.qq.com/oauth2.0/token
authorizeURL = https://graph.qq.com/oauth2.0/authorize
getOpenIDURL = https://graph.qq.com/oauth2.0/me
addTopicURL = https://graph.qq.com/shuoshuo/add_topic
addBlogURL = https://graph.qq.com/blog/add_one_blog
addAlbumURL = https://graph.qq.com/photo/add_album
uploadPicURL = https://graph.qq.com/photo/upload_pic
listAlbumURL = https://graph.qq.com/photo/list_album
addShareURL = https://graph.qq.com/share/add_share
checkPageFansURL = https://graph.qq.com/user/check_page_fans
addTURL = https://graph.qq.com/t/add_t
addPicTURL = https://graph.qq.com/t/add_pic_t
delTURL = https://graph.qq.com/t/del_t
getWeiboUserInfoURL = https://graph.qq.com/user/get_info
getWeiboOtherUserInfoURL = https://graph.qq.com/user/get_other_info
getFansListURL = https://graph.qq.com/relation/get_fanslist
getIdolsListURL = https://graph.qq.com/relation/get_idollist
addIdolURL = https://graph.qq.com/relation/add_idol
delIdolURL = https://graph.qq.com/relation/del_idol
getTenpayAddrURL = https://graph.qq.com/cft_info/get_tenpay_addr
getRepostListURL = https://graph.qq.com/t/get_repost_list
version = 2.0.0.0

7导入依赖

<!--热部署工具--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional></dependency><!--QQ登录--><!-- https://mvnrepository.com/artifact/net.gplatform/Sdk4J --><dependency><groupId>net.gplatform</groupId><artifactId>Sdk4J</artifactId><version>2.0</version></dependency>

8 编写controller

  //获取用户当前页面的url,方便返回登录之前的页面,private static String returnUrl = "" /*** @Description: qq登录的入口*/@GetMapping("/login")public ResponseEntity<Void> loginByQQ(HttpServletRequest request, HttpServletResponse response){returnUrl = request.getParameter("returnUrl");response.setContentType("text/html,charset=utf-8");try {response.sendRedirect(new Oauth().getAuthorizeURL(request));return ResponseEntity.ok().build();} catch (IOException | QQConnectException e) {LOGGER.warn("请求QQ登录失败, {}",e.getMessage());}return ResponseEntity.badRequest().build();}/**** 此处的qqlogin必须与你的网站回调域一致* @Description: 登录获取数据*/@RequestMapping("/qqlogin")public String login(HttpServletRequest request,HttpServletResponse response){User user = new User();try {AccessToken accessTokenObj = (new Oauth()).getAccessTokenByRequest(request);//用来或用户信息,get_user_info参数String accessToken   = null;String openID = null;long tokenExpireIn = 0L;if (accessTokenObj.getAccessToken().equals("")) {LOGGER.error("没有获取到响应参数");}else {accessToken = accessTokenObj.getAccessToken();tokenExpireIn = accessTokenObj.getExpireIn();System.out.println(String.valueOf(tokenExpireIn));// 利用获取到的accessToken 去获取当前用的openid -------- startOpenID openIDObj =  new OpenID(accessToken);openID = openIDObj.getUserOpenID();UserInfo userInfo = new UserInfo(accessToken, openID);UserInfoBean userInfoBean = userInfo.getUserInfo();/** 此处获取用户信息后可以在service层重新保存用户部分信息用作登录展示* 比如写一个UserInfo类用于信息展示,将UserInfo对应的用户信息通过加密的方式保存到* Cookie中,每次请求都会携带Cookie,然后解密重新设置过期时间再进行加密保存。* 用户退出就可以将Cookie信息删除,这样就不需要依赖QQ登录本身保存的信息了。*/if (userInfoBean.getRet()==0){//获取qq空间头像,暂不知怎么获取qq头像user.setAvatar(userInfoBean.getAvatar().getAvatarURL50());//用户openId,唯一标识user.setOpenId(openID);//用户qq昵称user.setNickName(userInfoBean.getNickname());//用户性别user.setGender(userInfoBean.getGender());}else {LOGGER.warn("很抱歉,我们没能正确获取到您的信息,原因是:{} ", userInfoBean.getMsg());}}} catch (QQConnectException e) {LOGGER.error("qq连接发生异常 {}",e.getMessage());}return "redirect:"+returnUrl;}

获取用户信息API

get_user_info

通过上面的方法可以获取的用户信息较少,并且获取的头像是QQ空间的头像而不是QQ头像,如果没有QQ空间的话,那么就没有用户头像了。可以通过get_user_info获取用户更多的信息,比如QQ头像!

新建一个用户信息实体类

根据返回的json创建用户对象

package com.cx.pojo;import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import jdk.nashorn.internal.ir.annotations.Ignore;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Transient;/***@JsonIgnoreProperties(ignoreUnknown = true) 忽略部分不能匹配的字段*@JsonProperty(value = "***"),因为获取的用户信息json不符合java命名规范,所有需要添加字段映射* @author 苍晓*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class ResultInfo {private int ret;private String msg;@JsonProperty(value = "is_lost")private boolean isLost;private String nickname;private String gender;@JsonProperty(value = "gender_type")private String genderType;private String province;private String city;private String year;private String constellation;private String figureurl;@JsonProperty(value = "figureurl_1")private String figureUrl1;@JsonProperty(value = "figureurl_2")private String figureUrl12;@JsonProperty(value = "figureurl_qq_1")private String figureUrlQq1;@JsonProperty(value = "figureurl_qq_2")private String figureUrlQq2;@JsonProperty(value = "figureurl_qq")private String figureUrlQq;@JsonProperty(value = "figureurl_type")private String figureUrlType;@JsonProperty(value = "is_yellow_vip")private String isYellowVip;private int vip;@JsonProperty(value = "yellow_vip_level")private int yellowVipLevel;private int level;@JsonProperty(value = "is_yellow_year_vip")private String isYellowYearVip;}

RestTemplate配置

package com.blog.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.client.RestTemplate;import java.util.Arrays;/*** @author 苍晓*/
@Configuration
public class RestTemplateConfig {@Beanpublic RestTemplate getRestTemplate(){RestTemplate restTemplate = new RestTemplate();MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();/**经过尝试,此处需要加一个MediaType.TEXT_HTML的返回类型,否则一直报错,解析不了返回信息。*/mappingJackson2HttpMessageConverter.setSupportedMediaTypes(Arrays.asList(MediaType.APPLICATION_JSON,MediaType.TEXT_HTML));restTemplate.getMessageConverters().add(mappingJackson2HttpMessageConverter);return restTemplate;}
}

测试获取用户信息

 //注入rest请求模板@Autowiredprivate RestTemplate restTemplate;private final String preUrl="https://graph.qq.com/user/get_user_info?" +"access_token=获取的登录用户AccessToken" +"&oauth_consumer_key=你的AppID" +"&openid=获取的登录用户的openID";@Testvoid qqInfo() {String object = this.restTemplate.getForObject(preUrl, String.class);ObjectMapper objectMapper = new ObjectMapper();try {System.out.println("============================");ResultInfo resultInfo = objectMapper.readValue(object,ResultInfo.class);System.out.println(resultInfo);} catch (JsonProcessingException e) {e.printStackTrace();}}

用Java实现QQ登录相关推荐

  1. 基于Java实现QQ登录和微博登录

    1 基于Java实现QQ登录和微博登录 1. 前言 个人网站最近增加了评论功能,为了方便用户不用注册就可以评论,对接了 QQ 和微博这 2 大常用软件的一键登录,总的来说其实都挺简单的,可能会有一点小 ...

  2. java qq登录界面_用java实现QQ登录界面怎么写

    展开全部 用32313133353236313431303231363533e78988e69d8331333365646263java做QQ登录界面的写法如下: package ch10; impo ...

  3. java仿qq登录 界面设计,Java Swing仿QQ登录界面效果

    本文实例为大家分享了Java Swing仿QQ登录界面展示的具体代码,供大家参考,具体内容如下 闲来无事将早些时候已实现的QQ登录界面再实现了一遍,纯手工打造(意思是没有用NetBeans.MyEcl ...

  4. JAVA编写QQ登录界面

    在开始学习JAVA图形界面编程中,老师留的第一个作业就是编写一个QQ登录界面,本来我的JAVA就不怎么会写,所以就在网上找啊找,结果就翻到了某位大佬的博客,参考了许多,附上大佬链接http://wz9 ...

  5. Java实现QQ登录和微博登录

    点击上方蓝色字体,选择"标星公众号" 优质文章,第一时间送达 关注公众号后台回复pay或mall获取实战项目资料+视频 作者:我是小茗同学来源:https://www.cnblog ...

  6. java实现qq登录界面_java模仿实现QQ登录界面

    本文实例为大家分享了java模仿实现qq登录界面的具体代码,供大家参考,具体内容如下 这是我模仿QQ2015版界面,实现的基本功能有登陆验证,重置等,当然直接复制代码运行是不一样的,还要注意自己插入自 ...

  7. java 微信 qq 登录_java实现 微博登录、微信登录、qq登录实现代码

    微信,微博,QQ,这是现在目前用的最多的手机 APP,我们做产品哪能不跟他们不沾边,对于登录,我想谁也不想要多少个帐号密码,根本记不住! 为了增加用户体验,用户能够快速的注册登录,第三方账号进行登录注 ...

  8. java 微信 qq 登录_拾人牙慧篇之———QQ微信的第三方登录实现

    一.写在前面 关于qq微信登录的原理之流我就不一一赘述了,对应的官网都有,在这里主要是展示我是怎么实现出来的,看了好几个博客,有的是直接复制官网的,有的不知道为什么实现不了.我只能保证我的这个是我实现 ...

  9. java 仿qq登录界面7.1_安卓开发学习笔记(七):仿写腾讯QQ登录注册界面

    这段代码的关键主要是在我们的相对布局以及线性布局上面,我们首先在总体布局里设置为线性布局,然后再在里面设置为相对布局,这是一个十分常见的XML布局模式. 废话不多说,直接上代码: 一.activity ...

最新文章

  1. Python实现字符串反转的6种方法
  2. 文本分类入门(六)训练Part 3
  3. One order search by guid uuid
  4. 中文能用rsa加密吗_外文文献数据库能用中文词进行检索吗?
  5. [Matlab]函数表达式运算
  6. python审计运用_用Python来分析审计行业的这10年
  7. Linux内核编程打印所有线程信息
  8. TP5 ZipArchive 的坑
  9. 计算垂直平面与三维线段交点
  10. 航天器轨迹预测——根据速度和位置确定初轨
  11. Java POI PPT 转 PNG 图片设置背景色失效
  12. 还记得儿时的那片海么?
  13. 购物中心最好的无线AP是什么?
  14. 周期性的方波 matlab,matlab产生方波脉冲和周期性方波信号 - 副本
  15. cub数据集多少张图片_细粒度分类数据集汇总
  16. android移动日记代码,Android开源项目-小熊日记源码
  17. 贷款计算公式——java实现
  18. MRP计算之计划展望期、需求时界、计划时界及关系
  19. 工厂模式与策略模式之区别
  20. 一文读懂云渲染“串流”全链路时延及优化策略

热门文章

  1. SuperMap三维专题之倾斜摄影——倾斜摄影数据优化篇
  2. 本地连接服务器mysql
  3. AI设计 | 如何让零基础小白在3分钟内利用AI人工智能设计Logo?
  4. justfont金萱
  5. 解决雷神SpringBoot2中导入依赖报错的问题
  6. android调用系统自带的的浏览器搜索关键字
  7. python2.6.6升级至2.7排坑文档
  8. 【解决Windows】电脑桌面文件卡顿变白问题
  9. Python递归算法详解
  10. OData BATCH 使用方法