日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

手把手教你實現Java第三方應用登錄

瀏覽:21日期:2023-12-07 18:25:38
目錄什么是OAuth2.0申請網站接入創建SpringBoot應用實現登錄流程

大家在自己做項目的時候有沒有想過實現一個第三方應用登錄呢?類似這種:

手把手教你實現Java第三方應用登錄

本篇文章就來聊一聊該如何實現第三方應用登錄。

什么是OAuth2.0

OAuth是一項協議,它為用戶資源的授權提供了一個安全、開放而簡易的標準,OAuth的授權不會使第三方觸及到用戶的賬號信息(比如密碼),因此OAuth是相對安全的。而OAuth2.0就是OAuth的延續,不過2.0更加關注客戶端開發者的簡易性。

申請網站接入

常見的第三方應用都支持第三方登錄,比如:QQ、微信、微博、GitHub、Gitee等,要想申請第三方登錄權限,就需要去到對應的平臺,比如QQ,搜索QQ開放平臺:

手把手教你實現Java第三方應用登錄

進入應用管理,并創建應用即可:

手把手教你實現Java第三方應用登錄

不過對于QQ、微信、微博等的網站接入都需要身份認證,過程比較繁瑣,所以我們使用Gitee作為第三方應用進行接入。

首先打開Gitee,選擇設置:

手把手教你實現Java第三方應用登錄

在設置中選擇第三方應用:

手把手教你實現Java第三方應用登錄

點擊創建應用并填寫相關信息:

手把手教你實現Java第三方應用登錄

應用名稱可以隨意填寫,但是下面的兩個地址就有用途了,對于應用主頁,它需要填寫的是當前應用的主頁,而應用回調接口填寫的是當登錄成功后需要跳轉的頁面。

創建SpringBoot應用

申請完成后,就可以來創建SpringBoot應用,并新建一個index.html頁面:

<!DOCTYPE html><html lang='en'> <head> <meta charset='UTF-8'> <title>Title</title> </head> <body> <form> 用戶名:<input type='text'/><br/> 密碼:<input type='password'/><br/> <a href='http://www.b3g6.com/bcjs/20785.html'>Gitee登錄</a> <input type='submit' value='登錄'/><br/> </form> </body></html>

效果如下:

手把手教你實現Java第三方應用登錄

頁面很丑,但不重要,實現功能即可。

現在我們的需求是點擊Gitee登錄鏈接,會跳轉至一個第三方的登錄頁面,就像這樣:

手把手教你實現Java第三方應用登錄

那么該如何實現呢?

回到Gitee中,在創建完應用后,將頁面拖動到下方,會看到模擬請求按鈕:

手把手教你實現Java第三方應用登錄

點擊一下該按鈕,會進行一個模擬登錄:

手把手教你實現Java第三方應用登錄

地址欄中的地址就是我們需要跳轉的頁面,將地址復制下來:

https://gitee.com/oauth/authorize?client_id=52908197466cd3008db76a6018de66c8d222656056fa78b26dd58d1f4fa0a606&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Fsuccess&response_type=code

里面總共有3個參數,分別是:

client_id redirect_uri response_type

其中client_id在創建完應用之后便會提供給我們:

手把手教你實現Java第三方應用登錄

也就是地址上的內容,而redirect_uri是在點擊了同意授權按鈕之后需要跳轉的頁面,即:登錄成功之后,需要跳轉至成功后的頁面,最后是response_type,它表示響應類型為一個授權碼。

來了解一下授權碼的作用,當用戶點擊了同意授權按鈕之后,Gitee服務器會給redirect_uri指向的頁面傳遞一個授權碼,此時就可以接收到這個授權碼,再去換取AccessToken,只有獲取到了AccessToken,才能夠獲取到Gitee中當前用戶的某些信息。

點擊了同意授權按鈕后:

手把手教你實現Java第三方應用登錄

得到了授權碼后,通過該地址能夠換取AccessToken:

https://gitee.com/oauth/token?grant_type=authorization_code&code={code}&client_id={client_id}&redirect_uri={redirect_uri}&client_secret={client_secret}

該地址要求以Post形式請求,使用PostMan測試一下,將參數按要求設置好:

手把手教你實現Java第三方應用登錄

得到相應結果:

{ 'access_token': 'cd2c33c3fe548a23188159f87da70110', 'token_type': 'bearer', 'expires_in': 86400, 'refresh_token': 'c95a38ab2357638ffc4dc6f09c623f2333e0930a37dec8e2f191a40d7afd3514', 'scope': 'user_info', 'created_at': 1627974370}

得到了AccessToken之后,就可以獲取到用戶在Gitee中已經授權的任何信息了。

整個授權認證的過程如下圖所示:

手把手教你實現Java第三方應用登錄

實現登錄流程

熟悉了整合流程之后,我們用代碼來實現一下,首先修改頁面:

<!DOCTYPE html><html lang='en'> <head> <meta charset='UTF-8'> <title>Title</title> </head> <body> <form> 用戶名:<input type='text'/><br/> 密碼:<input type='password'/><br/> <a >Gitee登錄</a> <input type='submit' value='登錄'/><br/> </form> </body></html>

現在超鏈接的地址經過修改后就能成功跳轉至Gitee授權頁面了,因為授權成功后跳轉的地址為 http://localhost:8080/success ,所以需要來處理一下這個請求,創建一個控制器:

@Controllerpublic class LoginController { @GetMapping('/success') public String login(@RequestParam('code') String code){System.out.println(code);return 'success'; }@GetMapping('/') public String index(){return 'index'; }}

當授權成功后我們讓其跳轉至success.html頁面,并接收Gitee傳遞過來的授權碼,所以創建success.html:

<!DOCTYPE html><html lang='en'> <head> <meta charset='UTF-8'> <title>Title</title> </head> <body> <h1>登錄成功!</h1> </body></html>

啟動項目測試一下:

手把手教你實現Java第三方應用登錄

點擊同意授權后確實登錄成功了,控制臺也輸出了授權碼:

e907fd92d8392ebcd72dff321da45115ff0fba2dec0e6918b233ec7d03b76e5d

其實到這里登錄流程還沒有結束,因為如果使用第三方應用登錄的話,平臺會使用第三方應用的一些信息,比如賬號、頭像等直接作為當前平臺的登錄名和頭像,所以我們還需要獲取用戶在Gitee中的一些信息。

此處參考Gitee的API文檔:

手把手教你實現Java第三方應用登錄

比如獲取授權用戶的資料信息:

手把手教你實現Java第三方應用登錄

它需要傳遞一個access_token作為參數,那我們要做的就是使用授權碼去得到access_key:

@Controllerpublic class LoginController { @GetMapping('/success') public String login(@RequestParam('code') String code, Map<String,String> map) {// 獲取accesskeyString accessKey = getAccessKey(code);System.out.println(accessKey);// 通過accessKey獲取用戶信息String userInfo = getUserInfo(accessKey);// 取出用戶名String name = (String) JSONObject.parseObject(userInfo).get('name');// 取出頭像String avatar_url = (String) JSONObject.parseObject(userInfo).get('avatar_url');// 放入請求域map.put('name',name);map.put('avatar_url',avatar_url);return 'success'; } /** * 獲取用戶信息 */ private String getUserInfo(String accessKey) {String json = '';OkHttpClient client = new OkHttpClient();// 通過該地址能夠獲取到用戶信息String url = 'https://gitee.com/api/v5/user?access_token=' + accessKey;Request request = new Request.Builder().get().url(url).build();try { Response response = client.newCall(request).execute(); json = response.body().string();} catch (IOException e) { e.printStackTrace();}return json; } /** * 獲取AccessKey */ private String getAccessKey(String code) {OkHttpClient client = new OkHttpClient();// 通過該地址能夠獲取到access_tokenString url = 'https://gitee.com/oauth/token';// 封裝請求參數RequestBody requestBody = new FormBody.Builder().add('grant_type', 'authorization_code').add('code', code).add('client_id', '52908197466cd3008db76a6018de66c8d222656056fa78b26dd58d1f4fa0a606').add('redirect_uri', 'http://localhost:8080/success').add('client_secret', '7e84401a9752e88d22d5450c1687ca6a19bc34f45fe3452cefd33312d8153978').build();Request request = new Request.Builder().post(requestBody).url(url).build();String accessKey = '';try { Response response = client.newCall(request).execute(); String json = response.body().string(); // 獲取json串中的access_token屬性 accessKey = (String) JSONObject.parseObject(json).get('access_token');} catch (IOException e) { e.printStackTrace();}return accessKey; } @GetMapping('/') public String index() {return 'index'; }}

success.html頁面需要顯示用戶信息:

<!DOCTYPE html><html lang='en'> <head> <meta charset='UTF-8'> <title>Title</title> </head> <body> <h1>登錄成功!</h1> <h1>用戶名:<span th:text='${#request.getAttribute(’name’)}'></span></h1> <img th:src='http://www.b3g6.com/bcjs/${#request.getAttribute(’avatar_url’)}'> </body></html>

效果如下:

手把手教你實現Java第三方應用登錄

事實上,登錄流程遠沒有這么簡單,當用戶取消授權時就不能讓其登錄,程序里還沒有加上這類判斷,對于從未注冊過的用戶來說,這次登錄就相當于一次注冊,所以還需要以Gitee中用戶的某些信息作為注冊信息進行登錄,當已經注冊過的用戶使用第三方登錄時,要讓其正常登錄。

到此這篇關于手把手教你實現Java第三方應用登錄的文章就介紹到這了,更多相關Java第三方應用登錄內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品久久久久久久久久10秀| 91视频精品| 国产欧美在线| 999久久久精品国产| 国产日韩欧美一区| 亚洲三级视频| 久久久夜夜夜| 成人午夜在线| 免费在线观看一区| 日韩一区二区三免费高清在线观看| sm捆绑调教国产免费网站在线观看| 国产盗摄——sm在线视频| 日韩精品成人| 日韩1区2区3区| 日本欧洲一区二区| 不卡一区综合视频| 色婷婷久久久| 亚洲精品少妇| 亚洲女同一区| 日韩欧美精品| 国产精品99久久久久久董美香| 亚洲免费婷婷| 久热re这里精品视频在线6| 国内精品99| 国产模特精品视频久久久久| 欧美日韩视频| 午夜av不卡| 国产99精品一区| 日韩亚洲精品在线| 亚洲综合福利| 在线视频精品| 亚洲欧美在线综合| 蜜桃av一区二区在线观看| 九九在线精品| 久久午夜精品| 国产亚洲观看| 日韩一区二区中文| 国产精品美女| 中文字幕亚洲在线观看| 国产福利一区二区三区在线播放| 高清久久一区| 在线一区视频观看| 国产视频亚洲| 国产美女视频一区二区| 超碰99在线| 丝袜脚交一区二区| 国产精品久久国产愉拍| 福利精品在线| 妖精视频成人观看www| 日韩三级精品| 日韩毛片视频| 日韩高清成人在线| 久久久成人网| 国产高清日韩| 久久www成人_看片免费不卡| 日韩精品电影一区亚洲| 青青草伊人久久| 日韩精品久久理论片| 欧美性www| 亚洲成人三区| 精品91福利视频| 亚洲精品第一| 欧美va亚洲va日韩∨a综合色| 日韩国产精品久久久久久亚洲| av中文资源在线资源免费观看| 免费看精品久久片| 999国产精品视频| 国产一区调教| 日本欧美韩国一区三区| 亚洲激情社区| 久久久夜夜夜| 7777精品| 免费成人在线影院| 欧美aa国产视频| 国产精品国码视频| 免费黄色成人| 中文字幕一区二区三区日韩精品 | 欧美特黄视频| 99精品视频在线| 日韩国产激情| 综合日韩av| 国产美女高潮在线| 另类专区亚洲| 国内揄拍国内精品久久| 国产视频网站一区二区三区| 国产精品av久久久久久麻豆网| bbw在线视频| 日韩免费在线| 亚洲一级二级| 亚洲欧美日韩国产综合精品二区| 欧美日韩视频| 亚洲一区二区免费看| 欧美aⅴ一区二区三区视频| 久久精品国产99久久| 欧美欧美黄在线二区| 日韩专区精品| 国产剧情在线观看一区| 91精品推荐| 久久xxx视频| 午夜宅男久久久| 国产精品高清一区二区| 亚洲精品中文字幕乱码| 精品丝袜久久| 五月国产精品| 一区在线免费观看| caoporn视频在线| 欧美片第1页综合| 亚洲一区二区三区高清| 日韩精品永久网址| 国产精品羞羞答答在线观看| 偷拍欧美精品| av在线日韩| 久久精品免视看国产成人| 亚州欧美在线| 亚洲自啪免费| 久久精品亚洲人成影院| 丝袜美腿高跟呻吟高潮一区| 久久国产成人午夜av影院宅| 国产成人在线中文字幕| 久久国产人妖系列| 免费久久99精品国产| 好吊日精品视频 | 精品久久中文| 国产亚洲欧美日韩精品一区二区三区 | 日韩av有码| 国产精品v亚洲精品v日韩精品| 亚州av日韩av| 日韩高清电影一区| 欧美日韩亚洲国产精品| 日韩高清成人在线| 国产精品天天看天天狠| 国产伦精品一区二区三区视频| 啪啪亚洲精品| 国产伦理一区| 精品一区电影| 日韩成人亚洲| 五月精品视频| 午夜久久av| 亚洲aa在线| 三级精品视频| 99国产精品视频免费观看一公开 | 亚洲精品乱码| 国产精品对白久久久久粗| 青青草精品视频| 国产精品网站在线看| 久久精品国产久精国产爱| 国产精品蜜月aⅴ在线| 久久av免费| 日韩毛片在线| 亚洲一区中文| 青青草视频一区| 国产福利一区二区三区在线播放| 日本免费一区二区视频| 日韩国产欧美三级| 福利视频一区| 久久99伊人| 精品99久久| 蜜桃视频在线观看一区| 国产美女视频一区二区| 国产精品蜜芽在线观看| 国产农村妇女精品一二区| 国产区精品区| 国产精品99一区二区| 婷婷综合福利| 97se综合| 日韩精品a在线观看91| 婷婷成人在线| 欧美日韩一区自拍| 久久精品免费一区二区三区 | 中文一区一区三区高中清不卡免费| 99在线观看免费视频精品观看| 国产亚洲电影| 亚洲欧洲午夜| 九九99久久精品在免费线bt| 亚洲专区在线| 日韩精品一区二区三区免费观影 | 日韩高清欧美| 国产精品www.| 亚洲欧美激情诱惑| 国产精品久久久久av电视剧| 国产精品极品在线观看| 日本不卡视频在线| 午夜在线视频一区二区区别| 91精品亚洲| 日韩国产网站| 98精品久久久久久久| 老色鬼精品视频在线观看播放| 日韩精品导航| 日本午夜精品久久久| 午夜性色一区二区三区免费视频| 日韩视频久久| 国产一区白浆| 男女男精品网站| av不卡在线看| 亚洲综合日本| 亚洲制服一区| 欧美在线看片| 国产福利一区二区精品秒拍| 国产日韩欧美中文在线| 日本视频一区二区|