欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot集成QQ第三方登陸的實現(xiàn)

 更新時間:2020年11月26日 11:37:27   作者:CodeWorld  
這篇文章主要介紹了SpringBoot集成QQ第三方登陸的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、什么是第三方登錄,第三方登陸平臺如何選擇

1.簡介

第三方登錄不得不說的一個優(yōu)勢:那就是本地注冊和第三方注冊的選擇。雖然這是一個不能稱之為問題的問題,其中的心理學(xué)不得不說:做為一個app的新用戶,你有兩個選擇:1.做一個很受歡迎的用戶,注冊帳號,完善信息,over。2.選用第三方登錄/注冊,簡單方便。二者供你選擇,隨心挑選。

2.普通注冊分多種情況:

1.傳統(tǒng)的注冊方式,注冊門檻較高,易在注冊頁面流失用戶。 2.第三方登錄后,隨機分配一個id 3.郵件注冊,id手動填寫并且不能重復(fù) App開發(fā)過程中登錄的選擇還是視情況而定。

3.用戶眼中的第三方登陸

第三方登錄簡單快捷,每天面對不同的平臺不同的登錄界面能有一種簡單登錄的方式再好不過了。第三方登錄可以將自己在某個app的動態(tài)信息同步到各個sns平臺,這一功能無疑攬了一大批“懶”用戶,瀟瀟灑灑一號走江湖。不免擔(dān)心的是第三方登錄有很多資料信息可以公用,比較保守的人就慎重了,互聯(lián)網(wǎng)時代,信息也保密不到哪去。

4.本地客戶端眼中的第三方登錄

簡化登錄過程,降低注冊門檻,更能獲取海量用戶,在爭搶用戶,提高用戶轉(zhuǎn)化率注冊量是不可缺少的重要因素。本地注冊的穩(wěn)定+第三方登錄的便捷才是最合適的登錄方案。

5.第三方登錄平臺該如何選擇

謂的第三方登錄,就是利用用戶在第三方平臺上已有的賬號來快速完成自己應(yīng)用的登錄或者注冊的功能。而這里的第三方平臺,一般是已經(jīng)有大量用戶的平臺,如國內(nèi)關(guān)注度較高的騰訊QQ互聯(lián)平臺 、百度第三方賬號登陸,一登人臉登錄等等。更多關(guān)于第三方登錄,第三方登錄平臺,第三方登錄SDK,集成過程及開發(fā)建議可百度“開發(fā)者服務(wù)”學(xué)習(xí)。

好了,上面說了這么多,也是無濟于事,我們開始我們的正餐

二、QQ第三方平臺介紹:

1.基本要求:

我們需要有自己的服務(wù)器

我們需要自己的域名(且已備案)

如果上面的要求沒有到達,那就趕快去實現(xiàn)吧。。。。

2.平臺介紹:

2.1進入官網(wǎng)首頁:
https://connect.qq.com/index.html

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

2.3創(chuàng)建網(wǎng)站應(yīng)用

2.4創(chuàng)建成功(需要審核通過后才能使用)

2.5查看信息

OKOK,到這一步我們的介紹信息就完成了,起始跟代碼一點關(guān)系還沒有。

我們前提工作要做哈?;A(chǔ)搭建好,根基才穩(wěn)。。。:tw-1f38e: :tw-1f38f:

三、實戰(zhàn)教程

1.基礎(chǔ)配置:

1.1首先還是我們的關(guān)心的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登陸相關(guān)的配置文件)

  app_ID =(這里就是你的應(yīng)用的APPID)
  app_KEY =(這里就是你的應(yīng)用的APPKEY)
  redirect_URI =(這里是你設(shè)置的回調(diào)地址)
  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.代碼實現(xiàn)

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登錄的回調(diào)方法
   * @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("登錄失敗:沒有獲取到響應(yīng)參數(shù)");

        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 去獲取當(dāng)前用的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網(wǎng)名中的特殊表情
   * @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

這個接口是跳轉(zhuǎn)QQ登陸界面------》當(dāng)我們點擊QQ登陸按鈕或者是超鏈接都可以跳轉(zhuǎn)到我們的QQ登陸界面,登陸成功后會自動進入到我們的回調(diào)地址進行授權(quán)

2.2.2 回調(diào)地址: /fc/connection

這里需要特殊說明,這個回調(diào)地址需要和你的創(chuàng)建應(yīng)用的地址一致

 

在這里我們的代碼就完成了,是不是很簡單呢,是的,那些方法都是封裝好了的,我們只需要調(diào)用就是了。。。。

四、最后補充

1.實現(xiàn)這個QQ登陸操作需要把項目上傳到我們的服務(wù)器上運行
2.可能你們設(shè)置的回調(diào)帶有端口,那么就需要在服務(wù)器上安裝Nginx,反向代理到我們的回調(diào)方法

到此這篇關(guān)于SpringBoot集成QQ第三方登陸的實現(xiàn)的文章就介紹到這了,更多相關(guān)SpringBoot集成QQ第三方登陸內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • spring data JPA 中的多屬性排序方式

    spring data JPA 中的多屬性排序方式

    這篇文章主要介紹了spring data JPA 中的多屬性排序方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java中死鎖的原理實戰(zhàn)分析

    Java中死鎖的原理實戰(zhàn)分析

    這篇文章主要介紹了Java中死鎖的原理,結(jié)合具體案例形式分析了java死鎖形成的相關(guān)原理,需要的朋友可以參考下
    2019-08-08
  • Java面試題沖刺第五天--基礎(chǔ)篇2

    Java面試題沖刺第五天--基礎(chǔ)篇2

    這篇文章主要為大家分享了最有價值的三道java面試題,涵蓋內(nèi)容全面,包括數(shù)據(jù)結(jié)構(gòu)和算法相關(guān)的題目、經(jīng)典面試編程題等,感興趣的小伙伴們可以參考一下
    2021-07-07
  • Java中&與&&的區(qū)別及說明

    Java中&與&&的區(qū)別及說明

    這篇文章主要介紹了Java中&與&&的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • JWT在OpenFeign調(diào)用中進行令牌中繼詳解

    JWT在OpenFeign調(diào)用中進行令牌中繼詳解

    Feign是一個聲明式的Web Service客戶端,是一種聲明式、模板化的HTTP客戶端。而OpenFeign是Spring Cloud 在Feign的基礎(chǔ)上支持了Spring MVC的注解,如@RequesMapping等等,這篇文章主要給大家介紹了關(guān)于JWT在OpenFeign調(diào)用中進行令牌中繼的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • java實現(xiàn)多圖片上傳功能

    java實現(xiàn)多圖片上傳功能

    這篇文章主要為大家詳細介紹了java多圖片同步上傳功能的實現(xiàn)方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • java 使用poi動態(tài)導(dǎo)出的操作

    java 使用poi動態(tài)導(dǎo)出的操作

    這篇文章主要介紹了java 使用poi動態(tài)導(dǎo)出的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Java開發(fā)Spark應(yīng)用程序自定義PipeLineStage詳解

    Java開發(fā)Spark應(yīng)用程序自定義PipeLineStage詳解

    這篇文章主要為大家介紹了Java開發(fā)Spark應(yīng)用程序自定義PipeLineStage詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • 淺析Java中JSONObject和JSONArray使用

    淺析Java中JSONObject和JSONArray使用

    這篇文章主要介紹了Java中JSONObject和JSONArray使用的相關(guān)資料,需要的朋友可以參考下
    2016-06-06
  • J2ME 程序開發(fā)注意要點

    J2ME 程序開發(fā)注意要點

    講Java基礎(chǔ)的書籍中都是以J2SE來講基礎(chǔ),這就給學(xué)習(xí)造成了一些不必要的麻煩,下面將J2ME中用到的和不需要的Java基礎(chǔ)知識做一個簡單的說明
    2016-07-07

最新評論