日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring Boot——基于OkHTTP的GitHub第三方登录DEMO

發布時間:2024/10/5 javascript 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring Boot——基于OkHTTP的GitHub第三方登录DEMO 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

基本概念

OkHTTPHTTP是現代應用程序網絡的方式。這就是我們交換數據和媒體的方式。有效地執行HTTP可使您的內容加載更快并節省帶寬。

OkHttp是默認情況下有效的HTTP客戶端:

  • HTTP / 2支持允許對同一主機的所有請求共享一個套接字。
  • 連接池可減少請求延遲(如果HTTP / 2不可用)。
  • 透明的GZIP縮小了下載大小。
  • 響應緩存可以完全避免網絡重復請求。

GitHub OAuth APP:OAuth 是一種授權機制。數據的所有者告訴系統,同意授權第三方應用進入系統,獲取這些數據。系統從而產生一個短期的進入令牌(token),用來代替密碼,供第三方應用使用。

API

https://developer.github.com/apps/building-oauth-apps/authorizing-oauth-apps/

Maven

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions></dependency><!--HTTPClient--><dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>4.3.1</version></dependency><dependency><groupId>com.squareup.okhttp3</groupId><artifactId>mockwebserver</artifactId><version>4.3.1</version></dependency><!--JSON--><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.58</version></dependency></dependencies>

?

源代碼

application.properties

server.port=8080github.client.id=27dda83xxxxxx36043d4 github.client.secret=01f948axxxxxxef10d9132cfe6083dxxxxxx5f3503 github.redirect.uri=http://localhost:8080/callback

GitHubProvider.java

package club.zstuca.platform.provider;import club.zstuca.platform.dto.AccessTokenDTO; import club.zstuca.platform.dto.GitHubUser; import com.alibaba.fastjson.JSON; import okhttp3.*; import org.springframework.stereotype.Component;import java.io.IOException;@Component public class GitHubProvider {private static final MediaType MediaType_JSON= MediaType.get("application/json; charset=utf-8");public String getAccessToken(AccessTokenDTO accessTokenDTO){OkHttpClient client = new OkHttpClient();RequestBody body = RequestBody.create(JSON.toJSONString(accessTokenDTO), MediaType_JSON);Request request = new Request.Builder().url("https://github.com/login/oauth/access_token").post(body).build();try (Response response = client.newCall(request).execute()) {String resstring = response.body().string();String token =resstring.split("&")[0].split("=")[1];return token;}catch (IOException e) {e.printStackTrace();}return null;}public GitHubUser getUser(String AccessToken){OkHttpClient client = new OkHttpClient();Request request = new Request.Builder().url("https://api.github.com/user?access_token="+AccessToken).build();try{Response response = client.newCall(request).execute();String res = response.body().string();GitHubUser gitHubUser = JSON.parseObject(res, GitHubUser.class);return gitHubUser;} catch (IOException e) {e.printStackTrace();}return null;} }

AuthorizeController.java?

package club.zstuca.platform.controller;import club.zstuca.platform.dto.AccessTokenDTO; import club.zstuca.platform.dto.GitHubUser; import club.zstuca.platform.provider.GitHubProvider; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody;import javax.servlet.http.HttpServletRequest;/****/ @Controller public class AuthorizeController {@Autowiredprivate GitHubProvider gitHubProvider;@Value("${github.client.id}")private String clientId;@Value("${github.client.secret}")private String clientSecret;@Value("${github.redirect.uri}")private String redirectURI;@GetMapping("/callback")public String callBack(@RequestParam(name = "code")String code,@RequestParam(name = "state") String state,HttpServletRequest request){AccessTokenDTO accessTokenDTO = new AccessTokenDTO();accessTokenDTO.setClient_id(clientId);accessTokenDTO.setClient_secret(clientSecret);accessTokenDTO.setCode(code);accessTokenDTO.setRedirect_uri(redirectURI);accessTokenDTO.setState(state);String accessToken = gitHubProvider.getAccessToken(accessTokenDTO);GitHubUser user = gitHubProvider.getUser(accessToken);if(user != null){//登錄成功request.getSession().setAttribute("user",user);return "redirect:index";}else {//登錄失敗return "redirect:index";}//return "index"+user.toString();}}

HTTP Request?

https://github.com/login/oauth/authorize?client_id=27dda83ebxxxxxxx43d4&redirect_uri=http://localhost:8080/callback&scope=user&state=1

運行結果

教學資源

https://www.bilibili.com/video/av65117012?p=8

參考文章

http://www.ruanyifeng.com/blog/2019/04/oauth_design.html

http://www.ruanyifeng.com/blog/2019/04/github-oauth.html

總結

以上是生活随笔為你收集整理的Spring Boot——基于OkHTTP的GitHub第三方登录DEMO的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。