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. 给每个函数写一个记录日志的功能.
  2. 用 Redis 搞定游戏中的实时排行榜,附源码!
  3. SQL 基础之DDL语句创建和管理表(十四)
  4. synchronized底层是怎么实现的?年薪超过80万!
  5. oracle大表如何快速删除一列,Oracle 对表中的记录进行大批量删除
  6. android 打印机打印html,Android下通过wifi调用打印机打印
  7. 软键盘弹起,导致底部被顶上去
  8. 重磅!阿里首次全面公开展示AI布局(附布局图/成绩单/六产业详解)
  9. python `__repr__`
  10. Linux 用户(useradd/userdel/groupadd/groupmod
  11. 信贷中的SAS,一份关于它的系统性内容|含案例
  12. dedecms网站轮播本地显示为什么上传到服务器就不显示了,dedecms后台上传图片实现图片轮播的方法...
  13. python logging使用_[译]Python Logging 使用指南
  14. java 文件流 追加_JAVA向文件中追加内容(转)
  15. 超薄内置DSP数字功放芯片
  16. 网传前端大神司徒正美突发病逝,再度思考健康与金钱
  17. AutoCAD2006启动慢解决方案
  18. 华为笔记本电脑home键和end键快捷方式
  19. 机器学习 面试题-第二章 线性模型(大厂必问,历经半年整理)
  20. 创新创业技术路线怎么写_如何分辨项目申报中的创新点,关键性技术,研发内容,技术路线的写法。...

热门文章

  1. ios相机内存_邱哥教你iPhone优化照片占用空间,节省内存
  2. mastercam9.1中怎么把程序直接生成记事本显示
  3. XAPP599-Vivado HLS的浮点设计
  4. 计算机没有创建家庭组选项,windows10专业版创建不了家庭组网络的解决方法
  5. 科技驱动金融 | 揭秘国寿财自动测试平台
  6. Gnome桌面环境安装
  7. 快递查询工具,一键查看所有快递的发出物流信息、最后更新物流
  8. linux 查看java端口_Linux之查看端口使用情况
  9. 我的世界mod服务器怎么制作,我的世界国服MOD添加教程 我的世界国服MOD添加方法...
  10. 【愚公系列】2021年11月 攻防世界-进阶题-MISC-024(stage1)