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

您的位置:首頁技術(shù)文章
文章詳情頁

手把手教你實(shí)現(xiàn)Java第三方應(yīng)用登錄

瀏覽:22日期:2023-12-07 18:25:38
目錄什么是OAuth2.0申請網(wǎng)站接入創(chuàng)建SpringBoot應(yīng)用實(shí)現(xiàn)登錄流程

大家在自己做項(xiàng)目的時(shí)候有沒有想過實(shí)現(xiàn)一個(gè)第三方應(yīng)用登錄呢?類似這種:

手把手教你實(shí)現(xiàn)Java第三方應(yīng)用登錄

本篇文章就來聊一聊該如何實(shí)現(xiàn)第三方應(yīng)用登錄。

什么是OAuth2.0

OAuth是一項(xiàng)協(xié)議,它為用戶資源的授權(quán)提供了一個(gè)安全、開放而簡易的標(biāo)準(zhǔn),OAuth的授權(quán)不會(huì)使第三方觸及到用戶的賬號信息(比如密碼),因此OAuth是相對安全的。而OAuth2.0就是OAuth的延續(xù),不過2.0更加關(guān)注客戶端開發(fā)者的簡易性。

申請網(wǎng)站接入

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

手把手教你實(shí)現(xiàn)Java第三方應(yīng)用登錄

進(jìn)入應(yīng)用管理,并創(chuàng)建應(yīng)用即可:

手把手教你實(shí)現(xiàn)Java第三方應(yīng)用登錄

不過對于QQ、微信、微博等的網(wǎng)站接入都需要身份認(rèn)證,過程比較繁瑣,所以我們使用Gitee作為第三方應(yīng)用進(jìn)行接入。

首先打開Gitee,選擇設(shè)置:

手把手教你實(shí)現(xiàn)Java第三方應(yīng)用登錄

在設(shè)置中選擇第三方應(yīng)用:

手把手教你實(shí)現(xiàn)Java第三方應(yīng)用登錄

點(diǎn)擊創(chuàng)建應(yīng)用并填寫相關(guān)信息:

手把手教你實(shí)現(xiàn)Java第三方應(yīng)用登錄

應(yīng)用名稱可以隨意填寫,但是下面的兩個(gè)地址就有用途了,對于應(yīng)用主頁,它需要填寫的是當(dāng)前應(yīng)用的主頁,而應(yīng)用回調(diào)接口填寫的是當(dāng)?shù)卿洺晒笮枰D(zhuǎn)的頁面。

創(chuàng)建SpringBoot應(yīng)用

申請完成后,就可以來創(chuàng)建SpringBoot應(yīng)用,并新建一個(gè)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://m.b3g6.com/bcjs/20785.html'>Gitee登錄</a> <input type='submit' value='登錄'/><br/> </form> </body></html>

效果如下:

手把手教你實(shí)現(xiàn)Java第三方應(yīng)用登錄

頁面很丑,但不重要,實(shí)現(xiàn)功能即可。

現(xiàn)在我們的需求是點(diǎn)擊Gitee登錄鏈接,會(huì)跳轉(zhuǎn)至一個(gè)第三方的登錄頁面,就像這樣:

手把手教你實(shí)現(xiàn)Java第三方應(yīng)用登錄

那么該如何實(shí)現(xiàn)呢?

回到Gitee中,在創(chuàng)建完應(yīng)用后,將頁面拖動(dòng)到下方,會(huì)看到模擬請求按鈕:

手把手教你實(shí)現(xiàn)Java第三方應(yīng)用登錄

點(diǎn)擊一下該按鈕,會(huì)進(jìn)行一個(gè)模擬登錄:

手把手教你實(shí)現(xiàn)Java第三方應(yīng)用登錄

地址欄中的地址就是我們需要跳轉(zhuǎn)的頁面,將地址復(fù)制下來:

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

里面總共有3個(gè)參數(shù),分別是:

client_id redirect_uri response_type

其中client_id在創(chuàng)建完應(yīng)用之后便會(huì)提供給我們:

手把手教你實(shí)現(xiàn)Java第三方應(yīng)用登錄

也就是地址上的內(nèi)容,而redirect_uri是在點(diǎn)擊了同意授權(quán)按鈕之后需要跳轉(zhuǎn)的頁面,即:登錄成功之后,需要跳轉(zhuǎn)至成功后的頁面,最后是response_type,它表示響應(yīng)類型為一個(gè)授權(quán)碼。

來了解一下授權(quán)碼的作用,當(dāng)用戶點(diǎn)擊了同意授權(quán)按鈕之后,Gitee服務(wù)器會(huì)給redirect_uri指向的頁面?zhèn)鬟f一個(gè)授權(quán)碼,此時(shí)就可以接收到這個(gè)授權(quán)碼,再去換取AccessToken,只有獲取到了AccessToken,才能夠獲取到Gitee中當(dāng)前用戶的某些信息。

點(diǎn)擊了同意授權(quán)按鈕后:

手把手教你實(shí)現(xiàn)Java第三方應(yīng)用登錄

得到了授權(quán)碼后,通過該地址能夠換取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測試一下,將參數(shù)按要求設(shè)置好:

手把手教你實(shí)現(xiàn)Java第三方應(yīng)用登錄

得到相應(yīng)結(jié)果:

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

得到了AccessToken之后,就可以獲取到用戶在Gitee中已經(jīng)授權(quán)的任何信息了。

整個(gè)授權(quán)認(rèn)證的過程如下圖所示:

手把手教你實(shí)現(xiàn)Java第三方應(yīng)用登錄

實(shí)現(xiàn)登錄流程

熟悉了整合流程之后,我們用代碼來實(shí)現(xiàn)一下,首先修改頁面:

<!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>

現(xiàn)在超鏈接的地址經(jīng)過修改后就能成功跳轉(zhuǎn)至Gitee授權(quán)頁面了,因?yàn)槭跈?quán)成功后跳轉(zhuǎn)的地址為 http://localhost:8080/success ,所以需要來處理一下這個(gè)請求,創(chuàng)建一個(gè)控制器:

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

當(dāng)授權(quán)成功后我們讓其跳轉(zhuǎn)至success.html頁面,并接收Gitee傳遞過來的授權(quán)碼,所以創(chuàng)建success.html:

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

啟動(dòng)項(xiàng)目測試一下:

手把手教你實(shí)現(xiàn)Java第三方應(yīng)用登錄

點(diǎn)擊同意授權(quán)后確實(shí)登錄成功了,控制臺(tái)也輸出了授權(quán)碼:

e907fd92d8392ebcd72dff321da45115ff0fba2dec0e6918b233ec7d03b76e5d

其實(shí)到這里登錄流程還沒有結(jié)束,因?yàn)槿绻褂玫谌綉?yīng)用登錄的話,平臺(tái)會(huì)使用第三方應(yīng)用的一些信息,比如賬號、頭像等直接作為當(dāng)前平臺(tái)的登錄名和頭像,所以我們還需要獲取用戶在Gitee中的一些信息。

此處參考Gitee的API文檔:

手把手教你實(shí)現(xiàn)Java第三方應(yīng)用登錄

比如獲取授權(quán)用戶的資料信息:

手把手教你實(shí)現(xiàn)Java第三方應(yīng)用登錄

它需要傳遞一個(gè)access_token作為參數(shù),那我們要做的就是使用授權(quán)碼去得到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';// 封裝請求參數(shù)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://m.b3g6.com/bcjs/${#request.getAttribute(’avatar_url’)}'> </body></html>

效果如下:

手把手教你實(shí)現(xiàn)Java第三方應(yīng)用登錄

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

到此這篇關(guān)于手把手教你實(shí)現(xiàn)Java第三方應(yīng)用登錄的文章就介紹到這了,更多相關(guān)Java第三方應(yīng)用登錄內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美jjzz| 国产欧美视频在线| 超碰超碰人人人人精品| 另类专区亚洲| 精品一区在线| 乱人伦精品视频在线观看| 亚洲欧美日韩精品一区二区| 一区二区三区四区在线观看国产日韩| 亚洲精品韩国| 91精品国产自产在线丝袜啪| 国产精品草草| 天堂中文av在线资源库| 午夜日本精品| 日本综合视频| 国产一区二区三区四区五区| 日韩一区自拍| 蜜桃av一区| 欧美日韩夜夜| yellow在线观看网址| 91高清一区| 日韩三区四区| 欧美男人天堂| 亚洲综合另类| 国产精品一线天粉嫩av| 神马午夜在线视频| 午夜一级在线看亚洲| 国产亚洲精品美女久久| 神马久久午夜| 在线精品一区| 日韩一区亚洲二区| 日韩在线电影| 亚洲人成在线网站| 亚洲精品三级| 不卡一二三区| 日韩欧美中文字幕一区二区三区| av最新在线| 视频一区二区三区在线| 国产极品嫩模在线观看91精品| 久久久久蜜桃| 日韩精品视频网| 久久久久国产精品一区二区| 日韩精品高清不卡| 免费高潮视频95在线观看网站| 三级欧美在线一区| 国产不卡一区| 中文精品电影| 日韩中文字幕高清在线观看| 午夜电影一区| 久久人人88| 国产九一精品| 久久亚洲不卡| 青青久久av| 国产日产精品_国产精品毛片 | 视频在线观看91| 精品香蕉视频| 亚洲精品动态| 免费欧美一区| 四虎8848精品成人免费网站| 日韩黄色av| 亚洲国产一区二区在线观看| 久久精品国产久精国产| 久久国产精品99国产| 麻豆精品一区二区综合av| 中文欧美日韩| 国产成人精品亚洲日本在线观看| 欧美亚洲综合视频| 视频在线观看国产精品| 精品三级久久| 精品三级在线| 国产精品国产三级在线观看| 午夜亚洲精品| 99热精品久久| 狠狠久久伊人中文字幕| 最新亚洲国产| 亚洲欧洲一区| 欧美精品资源| 精品国产精品久久一区免费式| 日本成人在线不卡视频| 国产在线成人| 日韩欧美精品| 国产精品www994| 欧美日韩一区二区国产| 日韩一区二区三区精品视频第3页| 午夜国产精品视频| 久久国产影院| 欧美日韩免费看片| 日韩电影在线视频| 九九久久国产| 青青草国产精品亚洲专区无| 亚洲欧美日韩综合国产aⅴ| 亚洲精品小说| 91久久久精品国产| 亚洲不卡av不卡一区二区| 亚洲欧洲美洲av| 国产成年精品| av综合电影网站| 97国产精品| 精品无人区麻豆乱码久久久| 国产精品一区二区三区av麻| 日本va欧美va瓶| 青草国产精品久久久久久| 日韩在线观看一区二区三区| 中文字幕亚洲精品乱码| 亚洲色图综合| 亚洲91网站| 日韩精品成人在线观看| 国产日产精品_国产精品毛片 | 91久久黄色| 久久aⅴ国产紧身牛仔裤| 亚洲少妇诱惑| 亚洲欧美久久久| 在线一区免费观看| 丝袜诱惑制服诱惑色一区在线观看 | 免费欧美日韩| 视频一区二区不卡| 日韩精品久久理论片| 国产精品调教视频| 久久99国产精品视频| 91欧美在线| 欧美1级日本1级| 三级在线观看一区二区| 欧美偷窥清纯综合图区| 精品久久97| 午夜久久久久| 日韩美女国产精品| 久久av超碰| 麻豆理论在线观看| 国产精品成人国产| 国产不卡av一区二区| 国产伦久视频在线观看| 伊人久久亚洲热| 99在线精品视频在线观看 | 麻豆久久一区二区| 超碰99在线| 久久精品国产www456c0m| 日韩亚洲精品在线| 综合色一区二区| 欧美日本久久| 老司机免费视频一区二区| 久久久久九九精品影院| jizzjizz中国精品麻豆| 中文字幕在线看片| 国产拍在线视频| 一本一道久久a久久精品蜜桃| 中文欧美日韩| 欧美日韩调教| 国产成人精品999在线观看| 九九色在线视频| 久久裸体视频| 亚洲欧洲一区二区天堂久久| 亚洲一区二区三区在线免费| 国产精品一区毛片| 国产成人精品亚洲日本在线观看| 午夜久久福利| 欧美亚洲色图校园春色| 精品久久97| 日韩午夜av| 国产欧美日韩精品一区二区三区| 精品久久久网| 午夜精品一区二区三区国产| 亚洲精品视频一二三区| 麻豆成人av在线| 91精品1区| 国产欧美日韩精品一区二区免费 | 午夜一级在线看亚洲| 欧美一区精品| 色在线视频观看| 一区二区三区网站| 久久久免费人体| 成人羞羞视频播放网站| 亚洲精品动态| 午夜影院一区| 中文字幕av亚洲精品一部二部| 精品理论电影在线| 日韩视频不卡| 精品免费av| 天堂成人免费av电影一区| 欧美xxxx性| 亚洲在线成人| 麻豆国产精品| 日韩中文字幕不卡| 麻豆免费精品视频| 欧美成人基地 | 欧美在线观看天堂一区二区三区| 成人在线免费观看网站| 好看的av在线不卡观看| 欧美一级一区| 成人午夜国产| 人人爱人人干婷婷丁香亚洲| 欧美日韩精品免费观看视完整 | 亚洲成人一区在线观看| 日韩精品中文字幕一区二区| 日本精品影院| 国产精品久久久久久久久久久久久久久| 日韩国产专区| 热久久久久久| 久久久9色精品国产一区二区三区| 久久精品 人人爱| 激情综合自拍| 成人日韩av|