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

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

原生java代碼實現碼云第三方驗證登錄的示例代碼

瀏覽:121日期:2022-08-14 15:28:16
碼云第三方驗證登錄

研究了QQ,碼云,微信等第三方登錄接口時,發現QQ以及微信第一步都需要驗證授權管理,而且個人測試需要提供手持身份證一張,并且驗證時間過長( 3天工作日左右吧 ),這樣會非常浪費大家學習第三方接口登錄的時間,終于, 在我的不屑努力下,找到了適合大家快速上手,測試第三方接口登錄的平臺-————碼云(看網上帖子說某WX接入還要開發者認證,人民幣300元)碼云鏈接地址https://gitee.com/

一、在碼云上創建應用1、在碼云上注冊一個賬號,點擊右上角設置

原生java代碼實現碼云第三方驗證登錄的示例代碼

2、創建應用

原生java代碼實現碼云第三方驗證登錄的示例代碼

3、填寫資料

很多同學不太了解什么是應用回調地址webhooks(第三方登錄成功后,會返回到你指定的地址,并且攜帶驗證是否成功的參數信息)

原生java代碼實現碼云第三方驗證登錄的示例代碼

4、獲取到clientId以及client Secret

clientId和client Sercret的主要作用是通過拼接得到請求地址,將地址重定向至授權登錄頁面

原生java代碼實現碼云第三方驗證登錄的示例代碼

原生java代碼實現碼云第三方驗證登錄的示例代碼

準備過程已完成

二、在項目中實現第三方登錄

大概流程

原生java代碼實現碼云第三方驗證登錄的示例代碼

1、導入依賴jar包

<!--servlet服務--><dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> </dependency><!--第三方登錄插件包--> <dependency> <groupId>me.zhyd.oauth</groupId> <artifactId>JustAuth</artifactId> <version>1.3.2</version> </dependency><!--服務器發送get,post工具包--> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.2</version> </dependency>2、跳轉授權頁面

AuthRequest authRequest = new AuthGiteeRequest(AuthConfig.builder().clientId(CLIENT_ID) //Client ID.clientSecret(CLIENT_SECRET) //Client Secret.redirectUri(REDIRECTURI) //回調地址.build());String authorizeUrl = authRequest.authorize(AuthStateUtils.createState());//跳轉到授權頁面response.sendRedirect(authorizeUrl);3、通過回調地址獲取到code值

//http://localhost:8080/login?actionName=giteeCode&code=e063730161cd40cf&state=25c74eba2ac5f String code = request.getParameter('code');4、再將用戶授權碼發送碼云服務器

補充一個小小的坑,碼云第三方驗證需要加上header信息,否則會報403錯誤

String url = 'https://gitee.com/oauth/token?grant_type=authorization_code&code='+code+'&client_id='+CLIENT_ID+'&redirect_uri='+REDIRECTURI+'&client_secret='+CLIENT_SECRET;Map<String,String> map = new HashMap<>();map.put('User-Agent','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36)');JSONObject s = HttpUtils.post(url,map);

授權登錄失敗會返回message錯誤信息,標識登錄失敗

成功:

{'access_token':'e386e20327b7c4','refresh_token':'057c79c2d1f957a5cb4d','scope':'user_info','created_at':15488,'token_type':'bearer','expires_in':86400}5、獲取碼云用戶信息

通過授權碼獲取到的json數據,其中access_token參數,可以訪問碼云的用戶數據

//https://gitee.com/api/v5/user?access_token=*******String access_token = s.getString('access_token');String url2 = 'https://gitee.com/api/v5/user?access_token='+access_token;JSONObject user = HttpUtils.get(url2,map);//1、設置響應類型輸出流response.setContentType('application/json;charset=UTF-8');//2、將json轉為字符串String str = JSON.toJSONString(user);//3、得到字符輸出流response.getWriter().write(str);

源碼:在這小編要說一下回調地址操作1和回調地址操作2的區別操作1:小編使用的是服務器的get,post發送請求,而跳轉“授權頁面”(giteeLogin 方法)使用的是插件,各位看主大大也可手動改為get請求,跳轉第三方登錄頁面,具體get地址請參考碼云oauth文檔其中A和B步驟,修改后就可以不用插件代碼跳轉授權頁面

操作2:完全使用的是JustAuth插件實現第三方登錄

import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;import com.shsxt.utils.HttpUtils;import me.zhyd.oauth.config.AuthConfig;import me.zhyd.oauth.model.AuthCallback;import me.zhyd.oauth.model.AuthResponse;import me.zhyd.oauth.request.AuthGiteeRequest;import me.zhyd.oauth.request.AuthRequest;import me.zhyd.oauth.utils.AuthStateUtils;import org.apache.http.client.ClientProtocolException;import org.apache.http.client.methods.HttpPost;import org.apache.http.client.methods.HttpRequestBase;import org.apache.http.impl.client.CloseableHttpClient;import org.apache.http.impl.client.HttpClients;import org.apache.http.util.EntityUtils;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.io.UnsupportedEncodingException;import java.util.HashMap;import java.util.Map;@WebServlet('/login')public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; //ac85a173bb89ee private final String CLIENT_ID = “Client ID” private final String CLIENT_SECRET= “Client Secret” private final String REDIRECTURI = “回調地址” protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//獲取用戶行為String actionName = request.getParameter('actionName');//判斷用戶行為if('giteeLogin'.equals(actionName)) { //如果發送碼云授權驗證 giteeLogin(request,response);}else if('giteeCode'.equals(actionName)) { //giteeCode(request,response); giteeCode2(request,response);}System.out.println('點擊了'); } /** * 回調地址后的操作1 * @param request * @param response */ private void giteeCode(HttpServletRequest request, HttpServletResponse response) throws IOException {//獲取codeString code = request.getParameter('code');String url = 'https://gitee.com/oauth/token?grant_type=authorization_code&code='+code+'&client_id='+CLIENT_ID+'&redirect_uri='+REDIRECTURI+'&client_secret='+CLIENT_SECRET;Map<String,String> map = new HashMap<>();map.put('User-Agent','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36)');JSONObject s = HttpUtils.post(url,map);System.out.println(s);//https://gitee.com/api/v5/user?access_token=*******String access_token = s.getString('access_token');String url2 = 'https://gitee.com/api/v5/user?access_token='+access_token;JSONObject user = HttpUtils.get(url2,map);//1、設置響應類型輸出流response.setContentType('application/json;charset=UTF-8');//2、將json轉為字符串String str = JSON.toJSONString(user);//3、得到字符輸出流response.getWriter().write(str); } /** * 回調地址后的操作2 * @param request * @param response */ private void giteeCode2(HttpServletRequest request, HttpServletResponse response) throws IOException { String code = request.getParameter('code');AuthRequest authRequest = new AuthGiteeRequest(AuthConfig.builder().clientId(CLIENT_ID) //Client ID.clientSecret(CLIENT_SECRET) //Client Secret.redirectUri(REDIRECTURI) //回調地址.build());AuthResponse json = authRequest.login(code);System.out.println(json); } /** * 跳轉授權頁面 * @param request * @param response */ private void giteeLogin(HttpServletRequest request, HttpServletResponse response) throws IOException {//跳轉授權頁面AuthRequest authRequest = new AuthGiteeRequest(AuthConfig.builder().clientId(CLIENT_ID) //Client ID.clientSecret(CLIENT_SECRET) //Client Secret.redirectUri(REDIRECTURI) //回調地址.build());String authorizeUrl = authRequest.authorize();//跳轉到授權頁面response.sendRedirect(authorizeUrl); }}

服務器發送get/post請求工具類

package com.shsxt.utils;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;import org.apache.http.client.ClientProtocolException;import org.apache.http.client.methods.HttpGet;import org.apache.http.client.methods.HttpPost;import org.apache.http.client.methods.HttpRequestBase;import org.apache.http.impl.client.CloseableHttpClient;import org.apache.http.impl.client.HttpClients;import org.apache.http.util.EntityUtils;import java.io.IOException;import java.io.UnsupportedEncodingException;import java.util.Map;import java.util.Set;public class HttpUtils { /* *發送簡單post請求 */ public static JSONObject post(String url) {HttpPost post = new HttpPost(url);return getResult(post); } /* *發送帶Header的post請求 */ public static JSONObject post(String url, Map<String, String> map) {HttpPost post = new HttpPost(url);if (!map.isEmpty()) { Set<Map.Entry<String, String>> entrys = map.entrySet(); for (Map.Entry<String, String> entry : entrys) {post.setHeader(entry.getKey(), entry.getValue()); }}return getResult(post); } /* *發送帶Header的get請求 */ public static JSONObject get(String url, Map<String, String> map) {HttpGet get = new HttpGet(url);if (!map.isEmpty()) { Set<Map.Entry<String, String>> entrys = map.entrySet(); for (Map.Entry<String, String> entry : entrys) {get.setHeader(entry.getKey(), entry.getValue()); }}return getResult(get); } /* *發送簡單的get請求 */ public static JSONObject get(String url) {HttpGet get = new HttpGet(url);return getResult(get); } /* *發送請求方法,請求響應為JSONObject */ private static JSONObject getResult(HttpRequestBase requestBase) {CloseableHttpClient httpClient = HttpClients.createDefault();String result = null;try { result = EntityUtils.toString(httpClient.execute(requestBase).getEntity()); result = new String(result.getBytes('ISO-8859-1'),'utf-8'); httpClient.close();} catch (UnsupportedEncodingException e1) { e1.printStackTrace();} catch (ClientProtocolException e1) { e1.printStackTrace();} catch (IOException e1) { e1.printStackTrace();} finally { return new JSONObject(JSON.parseObject(result));} } /* *當請求響應為String時 */ public static String getString(String url) {CloseableHttpClient httpClient = HttpClients.createDefault();HttpGet get = new HttpGet(url);String result = null;try { result = EntityUtils.toString(httpClient.execute(get).getEntity()); httpClient.close();} catch (UnsupportedEncodingException e1) { e1.printStackTrace();} catch (ClientProtocolException e1) { e1.printStackTrace();} catch (IOException e1) { e1.printStackTrace();} finally { return result;} }}```*當請求響應為String時 */ public static String getString(String url) {CloseableHttpClient httpClient = HttpClients.createDefault();HttpGet get = new HttpGet(url);String result = null;try { result = EntityUtils.toString(httpClient.execute(get).getEntity()); httpClient.close();} catch (UnsupportedEncodingException e1) { e1.printStackTrace();} catch (ClientProtocolException e1) { e1.printStackTrace();} catch (IOException e1) { e1.printStackTrace();} finally { return result;} }}前端頁面

原生java代碼實現碼云第三方驗證登錄的示例代碼

總結

到此這篇關于原生java代碼實現碼云第三方驗證登錄的示例代碼的文章就介紹到這了,更多相關java碼云第三方驗證登錄內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
激情综合婷婷| 国产精品试看| 98精品久久久久久久| 亚洲欧美高清| 日韩国产精品久久久| 亚洲精品看片| 中文在线不卡| 亚洲免费高清| 午夜在线视频一区二区区别| 久久亚洲一区| 最新国产精品视频| 免费在线观看视频一区| 亚洲一区二区三区在线免费| 国产精品porn| 免费一级欧美片在线观看网站 | 久久婷婷亚洲| 欧美好骚综合网| 91国语精品自产拍| 人在线成免费视频| 欧美中文一区二区| 日韩一二三区在线观看| 亚洲精品免费观看| 精品在线播放| 激情丁香综合| 奇米亚洲欧美| 亚洲国内精品| 国产精品成久久久久| 99亚洲精品| 日韩精品午夜| 国产欧美日韩在线观看视频| 国产精品一线天粉嫩av| 69堂免费精品视频在线播放| 国产精品午夜av| 国产精品入口久久| 日韩黄色大片| 丝袜美腿一区二区三区| 青青伊人久久| 人人草在线视频| 视频一区欧美精品| 国产日韩精品视频一区二区三区| 高清精品久久| 亚洲黄页一区| 欧美另类中文字幕 | 久久久久久黄| 亚洲精选成人| 欧美国产不卡| 欧美搞黄网站| 久久国产尿小便嘘嘘| 日韩在线二区| 日韩区欧美区| 日韩欧美三级| 免费在线视频一区| 久久99精品久久久久久园产越南| 亚洲欧洲美洲av| 亚洲色图网站| 日韩欧美视频专区| 亚洲精品日本| 国产美女一区| 欧美激情aⅴ一区二区三区| 久久亚洲精品中文字幕蜜潮电影| 天堂久久一区| 成人久久久久| 日韩和欧美的一区| 91精品一区国产高清在线gif| 日本h片久久| 免费视频国产一区| 国产乱人伦丫前精品视频 | 青草综合视频| 成人精品亚洲| 日本一区二区三区中文字幕| 国产理论在线| 欧美在线观看天堂一区二区三区| 色婷婷久久久| 国产精品羞羞答答在线观看| 一区在线观看| 国产精品福利在线观看播放| 午夜亚洲福利| 欧美99久久| 久久中文欧美| 日韩一二三区在线观看| 成人羞羞视频播放网站| 国产亚洲精品美女久久| 9色精品在线| 日韩免费看片| 国产日韩高清一区二区三区在线 | 91超碰国产精品| 久久一区亚洲| 视频一区日韩精品| 2023国产精品久久久精品双| 大香伊人久久精品一区二区| 黄色在线网站噜噜噜| 国产免费av国片精品草莓男男| 丝袜美腿亚洲一区二区图片| 九九精品调教| 国产成人在线中文字幕| 日本成人精品| 喷白浆一区二区| 九九色在线视频| 国产精品久久观看| 国产精品4hu.www| 日韩一区二区三区精品视频第3页| 久久精品青草| 天堂中文在线播放| 精品网站999| 久久精品999| 综合激情在线| 久久亚洲风情| 国产精品日韩欧美一区| 91精品久久久久久久久久不卡| 精品视频一区二区三区在线观看| 国产精品亚洲综合久久| 日韩中文字幕| 日韩亚洲在线| 亚洲女同一区| 蜜桃tv一区二区三区| 日韩欧美一区二区三区在线视频 | 国产精品片aa在线观看| 亚洲精品伊人| 中文字幕av一区二区三区四区| 99日韩精品| 国产一区日韩欧美| 亚洲精品一区三区三区在线观看| 国产一区二区三区91| 精品一区二区三区在线观看视频 | 精品国产乱码久久久久久樱花| 国产精品一区二区精品视频观看| 欧美亚洲国产日韩| 国产亚洲精品精品国产亚洲综合| 97久久超碰| 欧美日韩黄网站| 久久国产精品色av免费看| 日韩精品免费一区二区夜夜嗨 | 欧美日韩精品免费观看视频完整| av亚洲在线观看| 婷婷综合网站| 在线视频精品| 免费人成精品欧美精品 | 久久久精品久久久久久96| 五月激情久久| 亚洲高清久久| 国产一区二区精品| 亚洲丝袜美腿一区| 日韩av网站免费在线| 国产免费播放一区二区| 精品资源在线| 日本高清不卡一区二区三区视频| 中文字幕在线免费观看视频| 九九精品调教| 国产精品美女久久久| 亚洲精品一二| 国产精品一区三区在线观看| 麻豆成人综合网| av日韩中文| 欧美日韩国产综合网| 亚洲一区二区免费在线观看| 日韩av一二三| 精品美女久久| 激情欧美国产欧美| 中文精品电影| 国产精品资源| 日韩中文欧美| 久久国产亚洲精品| 丝袜脚交一区二区| 国产三级一区| 国产精品黑丝在线播放| 激情久久久久久| 亚洲1区在线观看| 精品少妇一区| 亚洲福利免费| 日韩不卡在线观看日韩不卡视频| 麻豆一区二区三| 久久久久久久久99精品大| 免费一区二区视频| 国产精品美女午夜爽爽| 香蕉成人av| 亚洲精品日韩久久| 你懂的亚洲视频| 欧美99久久| 国产精品一区毛片| 青青久久av| 日韩高清在线不卡| 日韩在线短视频| 午夜性色一区二区三区免费视频| 狠狠久久伊人中文字幕| 亚洲一区观看| 精品国产网站| 日韩在线卡一卡二| 国产va免费精品观看精品视频| 亚洲少妇自拍| 精品国产18久久久久久二百| 99亚洲视频| 国产精品99久久久久久董美香| 亚洲小说欧美另类婷婷| 国产日韩欧美高清免费| 激情综合亚洲| 久久亚洲国产精品尤物| 日韩在线一二三区| 中文字幕人成乱码在线观看| 午夜性色一区二区三区免费视频| 日韩久久视频|