电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

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

瀏覽:35日期: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
相關文章:
主站蜘蛛池模板: 艺术涂料_进口艺术涂料_艺术涂料加盟_艺术涂料十大品牌 -英国蒙太奇艺术涂料 | 磁棒电感生产厂家-电感器厂家-电感定制-贴片功率电感供应商-棒形电感生产厂家-苏州谷景电子有限公司 | 镀锌方管,无缝方管,伸缩套管,方矩管_山东重鑫致胜金属制品有限公司 | 机制砂选粉机_砂石选粉机厂家-盐城市助成粉磨科技有限公司 | 工业制氮机_psa制氮机厂家-宏骁智能装备科技江苏有限公司 | 净化车间装修_合肥厂房无尘室设计_合肥工厂洁净工程装修公司-安徽盛世和居装饰 | 接地电阻测试仪[厂家直销]_电缆故障测试仪[精准定位]_耐压测试仪-武汉南电至诚电力设备 | 泥浆在线密度计厂家-防爆数字压力表-膜盒-远传压力表厂家-江苏大亚自控设备有限公司 | 成都租车_成都租车公司_成都租车网_众行宝 | 不锈钢水箱生产厂家_消防水箱生产厂家-河南联固供水设备有限公司 | 硅胶制品-硅橡胶制品-东莞硅胶制品厂家-广东帝博科技有限公司 | 莱州网络公司|莱州网站建设|莱州网站优化|莱州阿里巴巴-莱州唯佳网络科技有限公司 | 盛源真空泵|空压机-浙江盛源空压机制造有限公司-【盛源官网】 | 工业机械三维动画制作 环保设备原理三维演示动画 自动化装配产线三维动画制作公司-南京燃动数字 聚合氯化铝_喷雾聚氯化铝_聚合氯化铝铁厂家_郑州亿升化工有限公司 | 动环监控_机房环境监控_DCIM_机房漏水检测-斯特纽 | 水质监测站_水质在线分析仪_水质自动监测系统_多参数水质在线监测仪_水质传感器-山东万象环境科技有限公司 | 氢氧化钙设备, 氢氧化钙生产线-淄博惠琛工贸有限公司 | 艺术涂料|木纹漆施工|稻草漆厂家|马来漆|石桦奴|水泥漆|选加河南天工涂料 | 广州中央空调回收,二手中央空调回收,旧空调回收,制冷设备回收,冷气机组回收公司-广州益夫制冷设备回收公司 | 变频器维修公司_plc维修_伺服驱动器维修_工控机维修 - 夫唯科技 变位机,焊接变位机,焊接变位器,小型变位机,小型焊接变位机-济南上弘机电设备有限公司 | 吸音板,隔音板,吸音材料,吸音板价格,声学材料 - 佛山诺声吸音板厂家 | 电动车头盔厂家_赠品头盔_安全帽批发_山东摩托车头盔—临沂承福头盔 | 河南凯邦机械制造有限公司 | 成都顶呱呱信息技术有限公司-贷款_个人贷款_银行贷款在线申请 - 成都贷款公司 | 切铝机-数控切割机-型材切割机-铝型材切割机-【昆山邓氏精密机械有限公司】 | 列管冷凝器,刮板蒸发器,外盘管反应釜厂家-无锡曼旺化工设备有限公司 | 慈溪麦田广告公司,提供慈溪广告设计。 | 礼仪庆典公司,礼仪策划公司,庆典公司,演出公司,演艺公司,年会酒会,生日寿宴,动工仪式,开工仪式,奠基典礼,商务会议,竣工落成,乔迁揭牌,签约启动-东莞市开门红文化传媒有限公司 | 防水套管厂家_刚性防水套管_柔性防水套管_不锈钢防水套管-郑州中泰管道 | 三价铬_环保铬_环保电镀_东莞共盈新材料贸易有限公司 | 骨龄仪_骨龄检测仪_儿童骨龄测试仪_品牌生产厂家【品源医疗】 | 连续密炼机_双转子连续密炼机_连续式密炼机-南京永睿机械制造有限公司 | 钢衬四氟管道_钢衬四氟直管_聚四氟乙烯衬里管件_聚四氟乙烯衬里管道-沧州汇霖管道科技有限公司 | Eiafans.com_环评爱好者 环评网|环评论坛|环评报告公示网|竣工环保验收公示网|环保验收报告公示网|环保自主验收公示|环评公示网|环保公示网|注册环评工程师|环境影响评价|环评师|规划环评|环评报告|环评考试网|环评论坛 - Powered by Discuz! | 辽宁资质代办_辽宁建筑资质办理_辽宁建筑资质延期升级_辽宁中杭资质代办 | 广州企亚 - 数码直喷、白墨印花、源头厂家、透气无手感方案服务商! | 乳化沥青设备_改性沥青设备_沥青加温罐_德州市昊通路桥工程有限公司 | 匀胶机旋涂仪-声扫显微镜-工业水浸超声-安赛斯(北京)科技有限公司 | 钢托盘,铁托盘,钢制托盘,镀锌托盘,饲料托盘,钢托盘制造商-南京飞天金属13260753852 | 范秘书_懂你的范文小秘书| 东风体检车厂家_公共卫生体检车_医院体检车_移动体检车-锦沅科贸 |