系统城装机大师 - 固镇县祥瑞电脑科技销售部宣传站!

当前位置:首页 > 网络编程 > 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. }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

分享到:

相关信息

系统教程栏目

栏目热门教程

人气教程排行

站长推荐

热门系统下载