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

使用SpringBoot+OkHttp+fastjson實現(xiàn)Github的OAuth第三方登錄

 更新時間:2020年02月02日 09:53:01   作者:技不如人甘拜下風  
這篇文章主要介紹了使用SpringBoot+OkHttp+fastjson實現(xiàn)Github的OAuth第三方登錄,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

一、在GitHub上創(chuàng)建一個OAuth





二、OAuth的原理

Spring官方文檔

三、OkHttp的使用

OkHttp官方網(wǎng)站

1.Post

代碼示例

//官方文檔:    public static final MediaType JSON 
//        = MediaType.get("application/json; charset=utf-8"); 
 MediaType mediaType = MediaType.get("application/json; charset=utf-8");//去掉前綴,并且修改MediaType對象名,因為一會使用fastjson變量會重名 
 OkHttpClient client = new OkHttpClient();//第二句照抄
 RequestBody body = RequestBody.create(json,mediaType);//直接復(fù)制方法體中的內(nèi)容
 Request request = new Request.Builder() 
    .url("")//填寫要發(fā)送請求的地址 
    .post(body) 
    .build(); 
try (Response response = client.newCall(request).execute()) { 
     return response.body().string();//返回的字符串(json)
} 

2.Get

代碼示例

OkHttpClient client = new OkHttpClient();//同上
 Request request = new Request.Builder()//直接復(fù)制方法體中的內(nèi)容
   .url(url)//同上
   .build();

 try (Response response = client.newCall(request).execute()) {
  return response.body().string();//同上
 }

四、fastJson的使用

JSON.toJSONString(實體類)//將實體類轉(zhuǎn)換為JSON字符串
JSON.parseObject(string, 實體類.class);//將JSON字符串轉(zhuǎn)換為實體類

五、代碼示例

前端代碼

<a  rel="external nofollow" >Login</a>
//scope和state不寫可能會報錯
@Controller 
public class AuthorizeController { 
 
 @Autowired 
 GithubProvider githubProvider; 
 
 @GetMapping("/callback") 
 public String callback(@RequestParam(name ="code") String code, @RequestParam(name ="state") String state){ 
   AccessTokenDTO accessTokenDTO = new AccessTokenDTO(); 
   accessTokenDTO.setClient_id(""); 
   accessTokenDTO.setClient\_secret(""); 
   accessTokenDTO.setCode(code); 
   accessTokenDTO.setState(state); 
   accessTokenDTO.setRedirect\_uri("https://github.com/login/oauth/access_token"); 
   String token = githubProvider.getAccessToken(accessTokenDTO); 
   GithubUser githubUser = githubProvider.getUser(token); 
   return "index"; 
 } 
 
}
@Component 
public class GithubProvider { 
 
  public String getAccessToken(AccessTokenDTO accessTokenDTO){ 
    MediaType mediaType = MediaType.get("application/json; charset=utf-8");
    OkHttpClient client = new OkHttpClient();
    RequestBody body = RequestBody.create(JSON.toJSONString(accessTokenDTO),mediaType);//用fastjson將實體類轉(zhuǎn)換為json字符串傳入
    Request request = new Request.Builder() 
         .url("https://github.com/login/oauth/access_token?cilen_id=xxx&client_secret=xxx"+accessTokenDTO.getCode()+ 
            "&redirect_uri=http://127.0.0.1:8080/callback&state=1") 
        .post(body) 
        .build(); 
    try (Response response = client.newCall(request).execute()) { 
      String string = response.body().string(); 
      String token = string.split("&")\[0\].split("=")\[1\];  
      return token; 
 } catch (IOException e) { 
      e.printStackTrace(); 
 } 
    return null; 
 } 
 
  public GithubUser getUser(String token){ 
    OkHttpClient client = new OkHttpClient(); 
    Request request = new Request.Builder() 
        .url("https://api.github.com/user?access_token="+token) 
        .build();  
    try (Response response = client.newCall(request).execute()) { 
      String string = response.body().string(); 
      GithubUser githubUser = JSON.parseObject(string, GithubUser.class);//用fastjson將json字符串轉(zhuǎn)換為實體類
      return githubUser; 
 } catch (IOException e) { 
      e.printStackTrace(); 
 } 
    return null; 
 } 
 
}

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring-boot原理及spring-boot-starter實例和代碼

    Spring-boot原理及spring-boot-starter實例和代碼

    spring-boot的starter是一個通過maven完成自包含并通過annotation配置使得可被spring上下文發(fā)現(xiàn)并實例化的一個可插拔的組件或服務(wù)。這篇文章主要介紹了Spring-boot原理及spring-boot-starter實例和代碼 ,需要的朋友可以參考下
    2019-06-06
  • 淺談PrintStream和PrintWriter的區(qū)別和聯(lián)系

    淺談PrintStream和PrintWriter的區(qū)別和聯(lián)系

    這篇文章主要介紹了淺談PrintStream和PrintWriter的區(qū)別和聯(lián)系,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • Jmail發(fā)送郵件工具類分享

    Jmail發(fā)送郵件工具類分享

    這篇文章主要為大家分享了Jmail發(fā)送郵件工具類,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Spring-Task定時任務(wù)的使用介紹

    Spring-Task定時任務(wù)的使用介紹

    目前springboot應(yīng)用廣泛,因此對于spring-task直接基于springboot框架介紹,不涉及xml配置。本文直接介紹spring-task的使用方法,需要的可以參考一下
    2022-11-11
  • Spring data JPA只查詢部分字段問題及解決

    Spring data JPA只查詢部分字段問題及解決

    這篇文章主要介紹了Spring data JPA只查詢部分字段問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Java之System.getProperty()的作用及使用說明

    Java之System.getProperty()的作用及使用說明

    這篇文章主要介紹了Java之System.getProperty()的作用及使用說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • 一個簡單的Java音樂播放器

    一個簡單的Java音樂播放器

    這篇文章主要為大家分享一個簡單的Java音樂播放器,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 基于Java注解(Annotation)的自定義注解入門介紹

    基于Java注解(Annotation)的自定義注解入門介紹

    要深入學習注解,我們就必須能定義自己的注解,并使用注解,在定義自己的注解之前,我們就必須要了解Java為我們提供的元注解和相關(guān)定義注解的語法
    2013-04-04
  • spring事務(wù)Propagation及其實現(xiàn)原理詳解

    spring事務(wù)Propagation及其實現(xiàn)原理詳解

    這篇文章主要介紹了spring事務(wù)Propagation及其實現(xiàn)原理詳解,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • Java(TM) Platform SE binary 打開jar文件的操作

    Java(TM) Platform SE binary 打開jar文件的操作

    這篇文章主要介紹了Java(TM) Platform SE binary 打開jar文件的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02

最新評論

双峰县| 邢台县| 铜梁县| 石台县| 湖南省| 黄梅县| 宁化县| 天津市| 朝阳区| 九江市| 旌德县| 无锡市| 广昌县| 昌乐县| 南漳县| 贡觉县| 司法| 新民市| 宁安市| 黄平县| 连云港市| 阿尔山市| 叶城县| 婺源县| 汝城县| 遵义县| 如东县| 江都市| 曲阳县| 长宁县| 普安县| 霍林郭勒市| 大足县| 阳曲县| 红桥区| 南澳县| 高清| 沙雅县| 阳谷县| 双城市| 中方县|