系統城裝機大師 - 唯一官網:www.farandoo.com!

當前位置:首頁 > 網絡編程 > JavaScript > 詳細頁面

使用SpringBoot+OkHttp+fastjson實現Github的OAuth第三方登錄

時間:2020-02-02來源:系統城作者:電腦系統城

一、在GitHub上創建一個OAuth

二、OAuth的原理

Spring官方文檔

三、OkHttp的使用

OkHttp官方網站

1.Post

代碼示例


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

2.Get

代碼示例


 
  1. OkHttpClient client = new OkHttpClient();//同上
  2. Request request = new Request.Builder()//直接復制方法體中的內容
  3. .url(url)//同上
  4. .build();
  5.  
  6. try (Response response = client.newCall(request).execute()) {
  7. return response.body().string();//同上
  8. }

四、fastJson的使用


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

五、代碼示例

前端代碼


 
  1. <a href="https://github.com/login/oauth/authorize?client_id=xxx&redirect_uri=http://127.0.0.1:8080/xxx&scope=user&state=1" rel="external nofollow" >Login</a>
  2. //scope和state不寫可能會報錯

 
  1. @Controller
  2. public class AuthorizeController {
  3.  
  4. @Autowired
  5. GithubProvider githubProvider;
  6.  
  7. @GetMapping("/callback")
  8. public String callback(@RequestParam(name ="code") String code, @RequestParam(name ="state") String state){
  9. AccessTokenDTO accessTokenDTO = new AccessTokenDTO();
  10. accessTokenDTO.setClient_id("");
  11. accessTokenDTO.setClient\_secret("");
  12. accessTokenDTO.setCode(code);
  13. accessTokenDTO.setState(state);
  14. accessTokenDTO.setRedirect\_uri("https://github.com/login/oauth/access_token");
  15. String token = githubProvider.getAccessToken(accessTokenDTO);
  16. GithubUser githubUser = githubProvider.getUser(token);
  17. return "index";
  18. }
  19.  
  20. }

 
  1. @Component
  2. public class GithubProvider {
  3.  
  4. public String getAccessToken(AccessTokenDTO accessTokenDTO){
  5. MediaType mediaType = MediaType.get("application/json; charset=utf-8");
  6. OkHttpClient client = new OkHttpClient();
  7. RequestBody body =RequestBody.create(JSON.toJSONString(accessTokenDTO),mediaType);//用fastjson將實體類轉換為json字符串傳入
  8. Request request = new Request.Builder()
  9. .url("https://github.com/login/oauth/access_token?cilen_id=xxx&client_secret=xxx"+accessTokenDTO.getCode()+
  10. "&redirect_uri=http://127.0.0.1:8080/callback&state=1")
  11. .post(body)
  12. .build();
  13. try (Response response = client.newCall(request).execute()) {
  14. String string = response.body().string();
  15. String token = string.split("&")\[0\].split("=")\[1\];
  16. return token;
  17. } catch (IOException e) {
  18. e.printStackTrace();
  19. }
  20. return null;
  21. }
  22.  
  23. public GithubUser getUser(String token){
  24. OkHttpClient client = new OkHttpClient();
  25. Request request = new Request.Builder()
  26. .url("https://api.github.com/user?access_token="+token)
  27. .build();
  28. try (Response response = client.newCall(request).execute()) {
  29. String string = response.body().string();
  30. GithubUser githubUser = JSON.parseObject(string, GithubUser.class);//用fastjson將json字符串轉換為實體類
  31. return githubUser;
  32. } catch (IOException e) {
  33. e.printStackTrace();
  34. }
  35. return null;
  36. }
  37.  
  38. }

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持我們。

分享到:

相關信息

系統教程欄目

欄目熱門教程

人氣教程排行

站長推薦

熱門系統下載

jlzzjlzz亚洲乱熟在线播放