热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SpringBoot集成QQ第三方登陆的实现

这篇文章主要介绍了SpringBoot集成QQ第三方登陆的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着

一、什么是第三方登录,第三方登陆平台如何选择

1.简介

第三方登录不得不说的一个优势:那就是本地注册和第三方注册的选择。虽然这是一个不能称之为问题的问题,其中的心理学不得不说:做为一个app的新用户,你有两个选择:1.做一个很受欢迎的用户,注册帐号,完善信息,over。2.选用第三方登录/注册,简单方便。二者供你选择,随心挑选。

2.普通注册分多种情况:

1.传统的注册方式,注册门槛较高,易在注册页面流失用户。 2.第三方登录后,随机分配一个id 3.邮件注册,id手动填写并且不能重复 App开发过程中登录的选择还是视情况而定。

3.用户眼中的第三方登陆

第三方登录简单快捷,每天面对不同的平台不同的登录界面能有一种简单登录的方式再好不过了。第三方登录可以将自己在某个app的动态信息同步到各个sns平台,这一功能无疑揽了一大批“懒”用户,潇潇洒洒一号走江湖。不免担心的是第三方登录有很多资料信息可以公用,比较保守的人就慎重了,互联网时代,信息也保密不到哪去。

4.本地客户端眼中的第三方登录

简化登录过程,降低注册门槛,更能获取海量用户,在争抢用户,提高用户转化率注册量是不可缺少的重要因素。本地注册的稳定+第三方登录的便捷才是最合适的登录方案。

5.第三方登录平台该如何选择

谓的第三方登录,就是利用用户在第三方平台上已有的账号来快速完成自己应用的登录或者注册的功能。而这里的第三方平台,一般是已经有大量用户的平台,如国内关注度较高的腾讯QQ互联平台 、百度第三方账号登陆,一登人脸登录等等。更多关于第三方登录,第三方登录平台,第三方登录SDK,集成过程及开发建议可百度“开发者服务”学习。

好了,上面说了这么多,也是无济于事,我们开始我们的正餐

二、QQ第三方平台介绍:

1.基本要求:

我们需要有自己的服务器

我们需要自己的域名(且已备案)

如果上面的要求没有到达,那就赶快去实现吧。。。。

2.平台介绍:

2.1进入官网首页:
https://connect.qq.com/index.html

2.2审核信息:(需要提交信息审核)

2.3创建网站应用

2.4创建成功(需要审核通过后才能使用)

2.5查看信息

OKOK,到这一步我们的介绍信息就完成了,起始跟代码一点关系还没有。

我们前提工作要做哈。基础搭建好,根基才稳。。。:tw-1f38e: :tw-1f38f:

三、实战教程

1.基础配置:

1.1首先还是我们的关心的POM文件(只添加了QQ的依赖)

 
    
      net.gplatform
      Sdk4J
      2.0
    

1.2 application.yml文件:
这里就不用列出来了,只配置了一个端口:server.port=80

1.3 qqconnectconfig.properties(qq登陆相关的配置文件)

  app_ID =(这里就是你的应用的APPID)
  app_KEY =(这里就是你的应用的APPKEY)
  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(u8BF7u4FEEu6539u6B64u5904)
  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

我们只需要修改上面的前三个就可以哦,其他可以不同改动。。。

2.代码实现

2.1LoginController

我们只需要写好我们的接口就完成了。。。

package com.fc.blog.controller.blog;

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;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.Map;

/**
 * 用户登陆
 */
@Controller
@RequestMapping("fc")
public class LoginController {

​
  private static final Logger LOGGER = LoggerFactory.getLogger(LoginController.class);

  /**
   * 请求QQ登陆页面
   * @param request
   * @param response
   * @return
   */
  @GetMapping("qq")
  public void loginByQQ(HttpServletRequest request, HttpServletResponse response){

    response.setContentType("text/html;charset=utf-8");

    try {

      response.sendRedirect(new Oauth().getAuthorizeURL(request));

      LOGGER.info("请求QQ页面中。。。。");

    } catch (QQConnectException | IOException e) {

      e.printStackTrace();

      LOGGER.error("请求QQ页面失败");

    }
  }

  /**
   * @Description QQ登录的回调方法
   * @Author xw
   * @Date 11:25 2020/2/21
   * @Param [request, response, map]
   * @return java.lang.String
   **/
  @RequestMapping("connection")
  public String connection(HttpServletRequest request, HttpServletResponse response, Map map) {

    try {

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

      String accessToken = null, openID = null;

      long tokenExpireIn = 0L;

      if ("".equals(accessTokenObj.getAccessToken())) {

        LOGGER.error("登录失败:没有获取到响应参数");

        return "redirect:/";

      } else {

        accessToken = accessTokenObj.getAccessToken();

        tokenExpireIn = accessTokenObj.getExpireIn();

        LOGGER.info("accessToken" + accessToken);

        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();

        UserInfo qzOneUserInfo= new UserInfo(accessToken, openID);

        UserInfoBean userInfoBean = qzoneUserInfo.getUserInfo();

        if (userInfoBean.getRet() == 0) {

          String name = removeNonBmpUnicode(userInfoBean.getNickname());

          String imgUrl = userInfoBean.getAvatar().getAvatarURL100();

          HttpSession session = request.getSession();

          session.setAttribute("openId",openID);

          session.setAttribute("name",name);

          session.setAttribute("imgUrl",imgUrl);

          return "redirect:/";

        } else {

          LOGGER.error("很抱歉,我们没能正确获取到您的信息,原因是: " + userInfoBean.getMsg());

          return "admin/404";
        }
      }
    } catch (QQConnectException e) {

      e.printStackTrace();

      LOGGER.error("QQ登陆失败");

      return "admin/404";
    }
  }
  /**
   * @Description 处理掉QQ网名中的特殊表情
   * @Author xw
   * @Date 11:26 2020/2/21
   * @Param [str]
   * @return java.lang.String
   **/
  public String removeNonBmpUnicode(String str) {
    if (str == null) {
      return null;
    }
    str = str.replaceAll("[^\u0000-\uFFFF]", "");
    if ("".equals(str)) {
      str = "($ _ $)";
    }
    return str;
  }

}

2.2代码讲解:

2.2.1 QQ登陆界面: /fc/qq

http://域名/fc/qq

这个接口是跳转QQ登陆界面------》当我们点击QQ登陆按钮或者是超链接都可以跳转到我们的QQ登陆界面,登陆成功后会自动进入到我们的回调地址进行授权

2.2.2 回调地址: /fc/connection

这里需要特殊说明,这个回调地址需要和你的创建应用的地址一致

 

在这里我们的代码就完成了,是不是很简单呢,是的,那些方法都是封装好了的,我们只需要调用就是了。。。。

四、最后补充

1.实现这个QQ登陆操作需要把项目上传到我们的服务器上运行
2.可能你们设置的回调带有端口,那么就需要在服务器上安装Nginx,反向代理到我们的回调方法

到此这篇关于SpringBoot集成QQ第三方登陆的实现的文章就介绍到这了,更多相关SpringBoot集成QQ第三方登陆内容请搜索编程笔记以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程笔记!

原文链接:https://juejin.cn/post/6898894830412234759


推荐阅读
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 本文讨论了在Spring 3.1中,数据源未能自动连接到@Configuration类的错误原因,并提供了解决方法。作者发现了错误的原因,并在代码中手动定义了PersistenceAnnotationBeanPostProcessor。作者删除了该定义后,问题得到解决。此外,作者还指出了默认的PersistenceAnnotationBeanPostProcessor的注册方式,并提供了自定义该bean定义的方法。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
author-avatar
喵喵浮游生物
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有