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的依赖)

 <!-- QQ登录依赖包 -->
    <dependency>
      <groupId>net.gplatform</groupId>
      <artifactId>Sdk4J</artifactId>
      <version>2.0</version>
    </dependency>

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(\u8BF7\u4FEE\u6539\u6B64\u5904)
  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<String,Object> 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第三方登陆内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Springboot网站第三方登录 微信登录

    微信开放平台接入,官网:https://open.weixin.qq.com,在官网注册并添加应用后即可获得APP_ID和APP_SECRET. 步骤一:创建一个继承AuthService的接口,WeChatAuthService,如下 public interface WeChatAuthService extends AuthService { public JSONObject getUserInfo(String accessToken, String openId); } 步骤二:We

  • 使用SpringBoot+OkHttp+fastjson实现Github的OAuth第三方登录

    一.在GitHub上创建一个OAuth 二.OAuth的原理 Spring官方文档 三.OkHttp的使用 OkHttp官方网站 1.Post 代码示例 //官方文档: public static final MediaType JSON // = MediaType.get("application/json; charset=utf-8"); MediaType mediaType = MediaType.get("application/json; charset=ut

  • 详解springboot解决第三方依赖jar包的问题

    公司现在用的是springboot+maven,想要把一些老的项目都改成这种框架.但是一些老的项目中有好多第三方的jar包或者是自己的jar包,maven库上没有.最初的解决方案是一个个的deploy到maven库上,但是遇到太多的三方jar包就太费事了.网上查了一下发现maven有一种方式可以将本地的Jar包依赖到项目中而不需要先deploy到maven库上.具体做法如下: 跟普通的java项目一样,新建个lib目录放jar包,我建在了src下. pom文件中依赖这样写: <!--添加外部依赖

  • springboot调用支付宝第三方接口(沙箱环境)

    springboot+调用支付宝第三方接口(沙箱环境) 大神勿喷!! 网址:https://developers.alipay.com/platform/developerIndex.htm 沙箱环境中给测试提供了一些必要和非必要的参数,需要自己动手修改的只有RSA密钥,需要通过支付宝提供的开发工具生成RSA密钥,下载链接:https://docs.open.alipay.com/291/105971#LDsXr 下载完成安装之后,可以生成RSA密钥.生成的密钥分为应用公钥,应用私钥.应用私钥自

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

    一.什么是第三方登录,第三方登陆平台如何选择 1.简介 第三方登录不得不说的一个优势:那就是本地注册和第三方注册的选择.虽然这是一个不能称之为问题的问题,其中的心理学不得不说:做为一个app的新用户,你有两个选择:1.做一个很受欢迎的用户,注册帐号,完善信息,over.2.选用第三方登录/注册,简单方便.二者供你选择,随心挑选. 2.普通注册分多种情况: 1.传统的注册方式,注册门槛较高,易在注册页面流失用户. 2.第三方登录后,随机分配一个id 3.邮件注册,id手动填写并且不能重复 App开

  • SpringBoot集成JWT实现登陆验证的方法详解

    1:首先,我们需要在项目中导入两个依赖: <dependency> <groupId>com.auth0</groupId> <artifactId>java-jwt</artifactId> <version>3.10.3</version> </dependency> <dependency> <groupId>cn.hutool</groupId> <artifa

  • springboot集成shiro自定义登陆过滤器方法

    目录 前言 自定义UsernamePasswordAuthenticationFilter 覆盖默认的FormAuthenticationFilter 完整UsernamePasswordAuthenticationFilter代码 前言 在上一篇博客springboot集成shiro权限管理简单实现中,用户在登录的过程中,有以下几个问题: 用户在没有登陆的情况下,访问需要权限的接口,服务器自动跳转到登陆页面,前端无法控制: 用户在登录成功后,服务器自动跳转到成功页,前端无法控制: 用户在登录失

  • springboot网站应用使用第三方qq登录的实现过程

    使用第三方qq登录需要在QQ互联官网https://connect.qq.com/中申请成功才可以使用. 1.登录成功后进入个人设置中心设置个人信息 2.选择公司或个人接入,这里我选择个人接入 3.注册审核通过以后,点击应用管理,右侧会显示审核已通过,然后就可以申请网站应用的第三方登录了 4.填写网站信息 5.然后就可以获得APP ID和 APP Key,有了这两个就可以使用qq登陆了 6.然后下边是如何使用登录接口进行授权登录 这个java使用qq接口登录的源码链接: 链接: https://

  • SpringBoot集成SpringSecurity和JWT做登陆鉴权的实现

    废话 目前流行的前后端分离让Java程序员可以更加专注的做好后台业务逻辑的功能实现,提供如返回Json格式的数据接口就可以.SpringBoot的易用性和对其他框架的高度集成,用来快速开发一个小型应用是最佳的选择. 一套前后端分离的后台项目,刚开始就要面对的就是登陆和授权的问题.这里提供一套方案供大家参考. 主要看点: 登陆后获取token,根据token来请求资源 根据用户角色来确定对资源的访问权限 统一异常处理 返回标准的Json格式数据 正文 首先是pom文件: <dependencies

  • Springboot集成第三方jar快速实现微信、支付宝等支付场景

    前言 最近有个小型的活动外包项目,要集成一下支付功能,因为项目较小,按照微信官方文档的配置开发又极容易出错,加上个人又比较懒. 于是在gitee上找到一个封装好的各种支付场景业务,只需要自己将支付参数修改一下就能成功调起支付业务,实现真正的快速开发. 一.项目地址 官方网站:https://javen205.gitee.io/ijpay/ Gitee仓库: https://gitee.com/javen205/IJPay 官方示例程序源码:https://gitee.com/javen205/I

  • SpringBoot 集成短信和邮件的配置示例详解

    目录 依赖 配置 编码 1.邮件 2.短信 准备工作 1.集成邮件 以QQ邮箱为例 在发送邮件之前,要开启POP3和SMTP协议,需要获得邮件服务器的授权码,获取授权码: 1.设置>账户 在账户的下面有一个开启SMTP协议的开关并进行密码验证: 2.获取成功的授权码 2.集成短信 以阿里云短信服务为例 1.登陆阿里云—>进入控制台—>开通短信服务 进入后根据提示开通短信服务即可. 2.充值 后期发短信测试需要,暂时可以跳过此步骤. 3.获取AccessKey和AccessSercet 文

  • iOS QQ第三方登录实现

    本文实例为大家分享了iOS QQ第三方登录实现代码,供大家参考,具体内容如下 一.准备工作 1.到QQ开放平台(http://connect.qq.com/ )注册成为开发者,申请appkey, 2.在URL Types中添加QQ的AppID,其格式为:"tencent" + AppID    例如tencent1104463316 二.配置AppDelegate.m 1.导入<TencentOpenAPI/QQApiInterface.h> 和<TencentOpe

  • Android使用友盟集成QQ、微信、微博等第三方分享与登录方法详解

    最近项目需要加入第三方分享和登录功能,之前其他项目的第三方分享和登录一直都使用ShareSDK实现的.为了统一使用友盟的全家桶,所以三方分享和登录也就选择了友盟.这里记录一下完整的集成与使用流程. 1.申请友盟Appkey 直接到友盟官网申请即可 2.下载SDK 下载地址:http://dev.umeng.com/social/android/sdk-download 下载的时候根据自己需求进行选择,我这里选择选择的是精简版(包含常用的分享与登录功能),只测试微信,QQ,新浪微博. 下载后解压出

  • SpringBoot集成E-mail发送各种类型邮件

    SpringBoot 集成 E-mail发送邮件,供大家参考,具体内容如下 JDK本身有自带发送邮件api,加上SpringBoot在进行封装,使得现在使用起来十分快速简洁. 话不多说,参考纯洁的微笑博客,更改jar版本为2.0.4 开干,基本没什么坑. 就是配置邮箱账号密码是,如果是qq邮箱,需要开启PO30和STMP服务,并且获取临时授权码. 开启服务链接: https://mail.qq.com/cgi-bin/frame_html?sid=a5ZSbreeNm9pHyl1&r=a8322

随机推荐