springboot-1 Github授权登录

1:先去Github注册一个账号

注册网站 点击查看官方文档:在这里插入图片描述
根据流程创建号自己的应用:参考文档在这里插入图片描述
查看你的Client ID和Client Secret

然后去创建一个web项目

1. 引入thymeleaf模版依赖

		 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

2.调用授权接口超链接
填上client_id,redirect_uri,scope,state

<a href="https://github.com/login/oauth/authorize?client_id=452d7db4f2e88378d0d1&redirect_uri=http://localhost:8080/callbacks&scope=user&state=1">授权登录</a>

3.点击授权登录解析code码获取token的依赖
okhttp引入解析code maven

 <!--okHTTP的依赖,.主要解析授权登录后的access_token,-->
        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>4.3.1</version>
        </dependency>
         <!--fastjson-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.56</version>
        </dependency>

4.创建私人令牌
在这里插入图片描述
创建成功后获得密钥也就是用户的token,直接输入https://api.github.com/user?access_token=你的密钥 就可以查看你的账号信息

代码实现

(分析:授权成功进入callbacks请求,会携带code,satte两个参数。我们利用okthttp解析出code,从而获取到access_token,然后在根据access——)
1. 代码结构:
在这里插入图片描述
创建User用户类,和授权所需要信息的类
AccessToken类

@Data
public class AccessToken {
    private String client_id;
    private String client_secret;
    private String code;
    private  String  redirect_uri;
    private  String state;

}

User类


@Data
public class User {
    private  Long id;
    private  String   name;
    private String  bio;
    //以上字段是token解析出来的json字符串中三个,具体其他属性根据需要在添加
}

2.首先看下授权成功进入的callbacks请求

@Controller
public class AuthoriceContrller {

    @Autowired
    private GithubPro githubPro;
    @GetMapping("/callbacks")  //首先通过a标签的连接登录成功之后会返回code ,state两个参数并且进入到callbacks请求
    public String callback(@RequestParam(name = "code")String code,
                           @RequestParam(name = "state")String state) throws IOException {
        AccessToken accessToken=new AccessToken();//根据官方文档,之后进入callbacks请求后,需要再次传递一下五个属性。利用okhttp解析code获取到token
        accessToken.setCode(code);
        accessToken.setState(state);
        accessToken.setRedirect_uri("http://localhost:8080/callbacks");
        accessToken.setClient_id("452d7db4f2e88378d0d1");
        accessToken.setClient_secret("0d5bc7c23c075550e094bc1cefed0dc4fbcb4691");
        String acess_token= githubPro.getAccressToken(accessToken);
        User user=githubPro.getUsers(acess_token);
        System.err.println("授权登录的user:"+user.toString());
        return "redirect:/";
    }
}


3:创建一个GithubPro类,主要用于解析code,access_token

@Component
public class GithubPro {

    //根据授权登录成功返回的code解析出token
    public  String getAccressToken(AccessToken accessToken) throws IOException {
        MediaType mediaType = MediaType.get("application/json; charset=utf-8");

        OkHttpClient client = new OkHttpClient();

        RequestBody body = RequestBody.create(mediaType, JSON.toJSONString(accessToken));
        Request request = new Request.Builder()
                .url("https://github.com/login/oauth/access_token")
                .post(body)
                .build();
        try (Response response = client.newCall(request).execute()) {
            String  string= response.body().string();//这是获取请求体的信息
            //返回的string是  access_token=e72e16c7e42f292c6912e7710c838347ae178b4a&token_type=bearer
            String acess_token=string.split("&")[0].split("=")[1];
            System.err.println("解析出来的token:"+acess_token);
            return acess_token;
        }
    }
    //在根据解析出来的token获取用户的信息(json字符串形式)
    public User getUsers(String  token) throws IOException {
        OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder()
                .url("https://api.github.com/user?access_token="+token)//这个token就是自己创建的令牌的密钥。也就是code解析出来的token
                .build();
        Response response = client.newCall(request).execute();
        String  string= response.body().string();//这时候的string就是用户的json字符串
        User user = JSON.parseObject(string, User.class);//将json字符串转换未User对象的属性

        return user;
    }

}

以上就是Github授权登录的大致流程,常量可以直接写在application.properites中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值