最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

原生java代碼實現(xiàn)碼云第三方驗證登錄的示例代碼

 更新時間:2021年04月12日 10:44:08   作者:唐僧洗頭用拉芳  
這篇文章主要介紹了原生java代碼實現(xiàn)碼云第三方驗證登錄的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

碼云第三方驗證登錄

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

一、在碼云上創(chuàng)建應(yīng)用

1、在碼云上注冊一個賬號,點擊右上角設(shè)置

在這里插入圖片描述

2、創(chuàng)建應(yīng)用

在這里插入圖片描述

3、填寫資料

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

在這里插入圖片描述

4、獲取到clientId以及client Secret

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

在這里插入圖片描述

在這里插入圖片描述

準備過程已完成

二、在項目中實現(xiàn)第三方登錄

大概流程

在這里插入圖片描述

1、導入依賴jar包

   <!--servlet服務(wù)-->
	<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>
	<!--服務(wù)器發(fā)送get,post工具包-->
    <dependency>
      <groupId>org.apache.httpcomponents</groupId>
      <artifactId>httpclient</artifactId>
      <version>4.5.2</version>
    </dependency>

2、跳轉(zhuǎn)授權(quán)頁面

AuthRequest authRequest = new AuthGiteeRequest(AuthConfig.builder()
        .clientId(CLIENT_ID) //Client ID
        .clientSecret(CLIENT_SECRET) //Client Secret
        .redirectUri(REDIRECTURI)   //回調(diào)地址
        .build());
String authorizeUrl = authRequest.authorize(AuthStateUtils.createState());
//跳轉(zhuǎn)到授權(quán)頁面
response.sendRedirect(authorizeUrl);

3、通過回調(diào)地址獲取到code值

//http://localhost:8080/login?actionName=giteeCode&code=e063730161cd40cf&state=25c74eba2ac5f 
String code = request.getParameter("code");

4、再將用戶授權(quán)碼發(fā)送碼云服務(wù)器

補充一個小小的坑,碼云第三方驗證需要加上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);

授權(quán)登錄失敗會返回message錯誤信息,標識登錄失敗

成功:

{
"access_token":"e386e20327b7c4",
"refresh_token":"057c79c2d1f957a5cb4d",
"scope":"user_info",
"created_at":15488,
"token_type":"bearer",
"expires_in":86400
}

5、獲取碼云用戶信息

通過授權(quán)碼獲取到的json數(shù)據(jù),其中access_token參數(shù),可以訪問碼云的用戶數(shù)據(jù)

//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、設(shè)置響應(yīng)類型輸出流
response.setContentType("application/json;charset=UTF-8");
//2、將json轉(zhuǎn)為字符串
String str = JSON.toJSONString(user);
//3、得到字符輸出流
response.getWriter().write(str);

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

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

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 = “回調(diào)地址”

    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //獲取用戶行為
        String actionName = request.getParameter("actionName");
        //判斷用戶行為
        if("giteeLogin".equals(actionName)) {
            //如果發(fā)送碼云授權(quán)驗證
            giteeLogin(request,response);
        }else if("giteeCode".equals(actionName)) {
            //giteeCode(request,response);
           giteeCode2(request,response);
        }
        System.out.println("點擊了");
    }

    /**
     * 回調(diào)地址后的操作1
     * @param request
     * @param response
     */
    private void giteeCode(HttpServletRequest request, HttpServletResponse response) throws IOException {
        //獲取code
        String 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、設(shè)置響應(yīng)類型輸出流
        response.setContentType("application/json;charset=UTF-8");
        //2、將json轉(zhuǎn)為字符串
        String str = JSON.toJSONString(user);
        //3、得到字符輸出流
        response.getWriter().write(str);
    }


    /**
     * 回調(diào)地址后的操作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)   //回調(diào)地址
                .build());

        AuthResponse json = authRequest.login(code);
        System.out.println(json);

    }


    /**
     * 跳轉(zhuǎn)授權(quán)頁面
     * @param request
     * @param response
     */
    private void giteeLogin(HttpServletRequest request, HttpServletResponse response) throws IOException {
        //跳轉(zhuǎn)授權(quán)頁面
        AuthRequest authRequest = new AuthGiteeRequest(AuthConfig.builder()
                .clientId(CLIENT_ID) //Client ID
                .clientSecret(CLIENT_SECRET) //Client Secret
                .redirectUri(REDIRECTURI)   //回調(diào)地址
                .build());
        String authorizeUrl = authRequest.authorize();
        //跳轉(zhuǎn)到授權(quán)頁面
        response.sendRedirect(authorizeUrl);
    }
}

服務(wù)器發(fā)送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 {
    /*
     *發(fā)送簡單post請求
     */
    public static JSONObject post(String url) {
        HttpPost post = new HttpPost(url);
        return getResult(post);
    }
    /*
     *發(fā)送帶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);
    }
    /*
     *發(fā)送帶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);

    }
    /*
     *發(fā)送簡單的get請求
     */
    public static JSONObject get(String url) {
        HttpGet get = new HttpGet(url);
        return getResult(get);

    }
    /*
     *發(fā)送請求方法,請求響應(yīng)為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));
        }
    }
    /*
     *當請求響應(yīng)為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;
        }
    }

}
```*當請求響應(yīng)為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;
        }
    }
}

前端頁面

在這里插入圖片描述

總結(jié)

到此這篇關(guān)于原生java代碼實現(xiàn)碼云第三方驗證登錄的示例代碼的文章就介紹到這了,更多相關(guān)java碼云第三方驗證登錄內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 在zuulFilter中注入bean失敗的解決方案

    在zuulFilter中注入bean失敗的解決方案

    這篇文章主要介紹了在zuulFilter中注入bean失敗的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Mybatis查詢時的延遲加載解析

    Mybatis查詢時的延遲加載解析

    這篇文章主要介紹了Mybatis查詢時的延遲加載解析,先從單表查詢,需要時再從關(guān)聯(lián)表去關(guān)聯(lián)查詢,能大大提高數(shù)據(jù)庫性能,因為查詢單表要比關(guān)聯(lián)查詢多張表速度要快,延遲加載分為兩種:深度延時加載,侵入式延遲加載,需要的朋友可以參考下
    2023-10-10
  • SpringBoot整合FTP使用示例教程

    SpringBoot整合FTP使用示例教程

    這篇文章主要介紹了SpringBoot整合FTP使用示例教程,本文通過示例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • Java8 使用 stream().sorted()對List集合進行排序的操作

    Java8 使用 stream().sorted()對List集合進行排序的操作

    這篇文章主要介紹了Java8 使用 stream().sorted()對List集合進行排序的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • hadoop的hdfs文件操作實現(xiàn)上傳文件到hdfs

    hadoop的hdfs文件操作實現(xiàn)上傳文件到hdfs

    這篇文章主要介紹了使用hadoop的API對HDFS上的文件訪問,其中包括上傳文件到HDFS上、從HDFS上下載文件和刪除HDFS上的文件,需要的朋友可以參考下
    2014-03-03
  • SSM項目使用攔截器實現(xiàn)登錄驗證功能

    SSM項目使用攔截器實現(xiàn)登錄驗證功能

    這篇文章主要介紹了在SSM項目中如何使用攔截器,實現(xiàn)登錄驗證功能。文中的實現(xiàn)步驟講解詳細,感興趣的小伙伴可以了解一下
    2022-01-01
  • Java實現(xiàn)漢字轉(zhuǎn)全拼音的方法總結(jié)

    Java實現(xiàn)漢字轉(zhuǎn)全拼音的方法總結(jié)

    在軟件開發(fā)中,經(jīng)常會遇到需要將漢字轉(zhuǎn)換成拼音的場景,比如在搜索引擎優(yōu)化、數(shù)據(jù)存儲、國際化等方面,Java作為一種廣泛使用的編程語言,提供了多種方法來實現(xiàn)漢字到拼音的轉(zhuǎn)換,本文將詳細介紹幾種常用的Java漢字轉(zhuǎn)全拼音的方法,并提供具體的代碼示例和步驟
    2024-12-12
  • Spring注解中@Configuration和@Component到底有啥區(qū)別

    Spring注解中@Configuration和@Component到底有啥區(qū)別

    之前一直搞不清@Component和@Configuration這兩個注解到底有啥區(qū)別,一直認為被這兩修飾的類可以被Spring實例化嘛,最近終于弄明白了,這篇文章主要給大家介紹了關(guān)于Spring注解中@Configuration和@Component到底有啥區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • Spring?Boot?項目中?JPA?語法的基本使用方法

    Spring?Boot?項目中?JPA?語法的基本使用方法

    這篇文章主要介紹了?Spring?Boot?項目中?JPA?語法的基本使用方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-10-10
  • springboot接口接收數(shù)組及多個參數(shù)的問題及解決

    springboot接口接收數(shù)組及多個參數(shù)的問題及解決

    這篇文章主要介紹了springboot接口接收數(shù)組及多個參數(shù)的問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11

最新評論

襄城县| 荆州市| 湘乡市| 浑源县| 呼和浩特市| 静海县| 陇西县| 阿拉尔市| 木里| 工布江达县| 平安县| 民丰县| 万源市| 富锦市| 东乡族自治县| 安图县| 比如县| 日照市| 乌拉特后旗| 托克逊县| 永川市| 嘉定区| 永善县| 吉木萨尔县| 五莲县| 太保市| 灵璧县| 贡嘎县| 天镇县| 永顺县| 山阳县| 新昌县| 新密市| 达尔| 双辽市| 东平县| 红原县| 曲麻莱县| 哈尔滨市| 利川市| 周至县|