zoukankan      html  css  js  c++  java
  • SpringMVC应用使用github授权登陆

    项目地址

    1.查看github OAuth登陆api

    API地址
    这里直接来理一下,使用github OAuth登陆的三个步骤
    在这里插入图片描述
    这里是官网的步骤

    1. 将界面重定向到github登陆页面。
    2. github确认登陆后,再将页面重定向到自己设置的重定向页面,同时携带一个code,再去请求github的界面从而获取access_token令牌。
    3. 携带这个access_token令牌再去post github的接口去获取用户信息。

    2.编写SpringMVC中的代码

    1.重定向到github

    首先我们有了个前端界面,界面是这样的
    在这里插入图片描述
    我们希望点击登陆按钮后,可以在登陆按钮的位置显示自己的登陆后的用户名那首先需要在HTML中在登陆按钮那里链接到Github官方提供的第一次跳转,携带下面的参数,
    我是这样写的

    <li th:if="${session.user==null}"><a href="https://github.com/login/oauth/authorize?client_id=30696dea27f0f7ec9475&redirect_uri=http://localhost:8888/callback&scope=user&state=1">登陆</a></li>
    

    在这里插入图片描述
    跳转到github的登陆页面,登陆之后会重定向到自己的界面,然后接收code参数,接下来我们会使用这个code去向github换取access_token令牌

    2.使用POST换取令牌

    在这里插入图片描述
    这里我们需要在代码中向https://github.com/login/oauth/access_token 发送HTTP请求,我是用的是okhttp这个第三方库。访问其官网,查看文档就可以知道如何发送POST请求。那么发送POST请求前,我们需要先提供参数,可以看到需要在代码里写的参数超过了5个,那么我们选择构造一个参数类,里面提供我们需要的参数,把然后这个类作为参数。但是类作为参数输入还有一个问题,就是怎么读取里面的参数,我是使用阿里的一个库,叫做fastjson,代码大致如下

    public String getAccessToken(AccessTokenDto accesstoken) {
            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 result = string.split("&")[0].split("=")[1];;
                System.out.println(result);
                return result;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    

    其中AccessTokenDto是个参数类,里面包含了五个属性,一一对应需要提供的我们的参数。最后我们通过对返回的解析,得到access_token。

    3.携带令牌去获取用户信息

    首先要知道,我们需要返回的什么参数,你可以先手动使用access_token去获取一次,我这里是选取了几个参数,
    在这里插入图片描述
    同样是构造类,然后使用fastjson从返回值中自动筛选出我们需求的参数。这里用的就是http里的get方法,同样我们使用okhttp库中的get方法,代码大致如下

     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 string = response.body().string();
                GithubUser githubUser = JSON.parseObject(string, GithubUser.class);
                return githubUser;
            } catch (IOException e) {
            }
            return null;
        }
    

    这样我们就得到了用户的github用户名了,ID还有签名了。最后我们将页面重定向到我们的初始页面。你可以自己把得到的数据在页面上显示出来,这很容易。

  • 相关阅读:
    dedecms(4)
    dedecms(3)
    jquery-submit:f[s] is not a function
    修改mysql字符集
    CentOS-6.3安装配置SVN[转载]
    centos下编译安装curl拓展
    CSS杂集(标准流&多行垂直居中)
    杂集一(yii自动登陆过程浅析)
    webservice连接超时处理
    JavaScript 实现触点式弹出菜单插件
  • 原文地址:https://www.cnblogs.com/yfc0818/p/11072591.html
Copyright © 2011-2022 走看看