使用SpringBoot+OkHttp+fastjson实现Github的OAuth第三方登录

一、在GitHub上创建一个OAuth

二、OAuth的原理

Spring官方文档

三、OkHttp的使用

OkHttp官方网站

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);//直接复制方法体中的内容
 Request request = new Request.Builder()
    .url("")//填写要发送请求的地址
    .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()//直接复制方法体中的内容
   .url(url)//同上
   .build();

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

四、fastJson的使用

JSON.toJSONString(实体类)//将实体类转换为JSON字符串
JSON.parseObject(string, 实体类.class);//将JSON字符串转换为实体类

五、代码示例

前端代码

<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>
//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将实体类转换为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字符串转换为实体类
      return githubUser;
 } catch (IOException e) {
      e.printStackTrace();
 }
    return null;
 } 

}

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

(0)

相关推荐

  • SpringBoot Redis配置Fastjson进行序列化和反序列化实现

    FastJson是阿里开源的一个高性能的JSON框架,FastJson数据处理速度快,无论序列化(把JavaBean对象转化成Json格式的字符串)和反序列化(把JSON格式的字符串转化为Java Bean对象),都是当之无愧的fast:功能强大(支持普通JDK类,包括javaBean, Collection, Date 或者enum):零依赖(没有依赖其他的任何类库). 1.写一个自定义序列化类 /** * 自定义序列化类 * @param <T> */ public class FastJ

  • SpringBoot整合FastJson过程解析

    这篇文章主要介绍了SpringBoot整合FastJson过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.Maven依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.33</version> </dependency&

  • springboot实现FastJson解析json数据的方法

    最近在研究springboot实现FastJson解析json数据的方法,那么今天也算个学习笔记吧! 添加jar包: <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.15</version> </dependency> 两种方式启动加载类: 第一种继承WebMvcConfigur

  • Spring Boot使用FastJson解析JSON数据的方法

    个人使用比较习惯的json框架是fastjson,所以spring boot默认的json使用起来就很陌生了,所以很自然我就想我能不能使用fastjson进行json解析呢? 1.引入fastjson依赖库: <!--添加fastjson解析JSON数据--> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <versio

  • 使用SpringBoot+OkHttp+fastjson实现Github的OAuth第三方登录

    一.在GitHub上创建一个OAuth 二.OAuth的原理 Spring官方文档 三.OkHttp的使用 OkHttp官方网站 1.Post 代码示例 //官方文档: public static final MediaType JSON // = MediaType.get("application/json; charset=utf-8"); MediaType mediaType = MediaType.get("application/json; charset=ut

  • springboot中用fastjson处理返回值为null的属性值

    我们先来看代码: @Configuration public class WebMvcConfig extends WebMvcConfigurationSupport { public FastJsonHttpMessageConverter fastJsonHttpMessageConverter() { FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter()

  • springboot+thymeleaf+druid+mybatis 多模块实现用户登录功能

    项目代码:https://github.com/bruceq/supermarket 项目结构: 依赖关系: common:公共层,无依赖 dao:数据层,依赖common service:服务层,依赖dao.common web:应用层,依赖dao.common.service 注:启动类在web层中 父依赖pom <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http:/

  • Springboot整合第三方登录功能的实现示例

    springboot 项目的pom文件引入依赖 <dependency> <groupId>me.zhyd.oauth</groupId> <artifactId>JustAuth</artifactId> <version>{latest-version}</version> </dependency> 代码 登录端点(controller) import com.tarzan.cms.common.prop

  • SpringBoot集成Spring Security用JWT令牌实现登录和鉴权的方法

    最近在做项目的过程中 需要用JWT做登录和鉴权 查了很多资料 都不甚详细 有的是需要在application.yml里进行jwt的配置 但我在导包后并没有相应的配置项 因而并不适用 在踩过很多坑之后 稍微整理了一下 做个笔记 一.概念 1.什么是JWT Json Web Token (JWT)是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准(RFC 7519) 该token被设计为紧凑且安全的 特别适用于分布式站点的单点登录(SSO)场景 随着JWT的出现 使得校验方式更加简单便

  • Python 通过爬虫实现GitHub网页的模拟登录的示例代码

    1. 实例描述 通过爬虫获取网页的信息时,有时需要登录网页后才可以获取网页中的可用数据,例如获取 GitHub 网页中的注册号码时,就需要先登录账号才能在登录后的页面中看到该信息,如下图所示.那么该如何实现模拟登录的功能呢?本文实现将通过爬虫实现 GitHub 网页的模拟登录. 2. 代码实现 在实现 GitHub 网页的模拟登录时,首先需要查看提交登录请求时都要哪些请求参数,然后获取登录请求的所有参数,再发送登录请求.如果登录成功的情况下获取页面中的注册号码信息即可.具体步骤如下: (1) 点

  • SpringBoot+SpringSession+Redis实现session共享及唯一登录示例

    最近在学习springboot,session这个点一直困扰了我好久,今天把这些天踩的坑分享出来吧,希望能帮助更多的人. 一.pom.xml配置 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency>

  • SpringBoot集成redis与session实现分布式单点登录

    目录 单点登录 SSO(Single Sign On) 什么是单点登录? 实现方式 开发技术 单点登录实现流程 实现案例 看效果 前言: 由于考虑到cookie的安全性问题,就有了下面这个版本的sso 单点登录 SSO(Single Sign On) 什么是单点登录? 单点登录的英文名叫做:Single Sign On(简称SSO),指在同一帐号平台下的多个应用系统中,用户只需登录一次,即可访问所有相互信任的系统.简而言之,多个系统,统一登陆. 我们可以这样理解,在一个服务模块登录后,其他模块无

随机推荐