Springboot lograr la cuenta de github la autorización de inicio de sesión

Springboot lograr la cuenta de github la autorización de inicio de sesión

En primer lugar, los trabajos preparatorios

web oficial de los siguientes documentos:

Crear una nueva aplicación

Autorizar a una APP

uso okhttp

APP autorizado por una lectura de documentos oficiales, el diagrama de tiempos resumirse de la siguiente manera:

En segundo lugar, el combate

1. Crear una nueva aplicación de autorización

Github en el hogar, en el centro de la parte superior derecho de la persona, haga clic en el menú desplegable, introduzca el Preferencias-> Preferencias- desarrollador> OAuth Apps-> Nueva aplicación de OAuth

Dicha autorización después de la nueva aplicación, podemos ver que tenemos acaba de construir la aplicación:

Haga clic en él, se puede ver el ID de cliente y la clave secreta de cliente:

2. Uso proyecto springboot para simular Autorización de la cuenta

Springboot un nuevo proyecto, la okhttp introducción, fastjson, configuración del paquete dependencia como sigue:

<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-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.squareup.okhttp/okhttp -->
        <dependency>
            <groupId>com.squareup.okhttp</groupId>
            <artifactId>okhttp</artifactId>
            <version>2.7.5</version>
        </dependency>


        <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.68</version>
        </dependency>

    </dependencies>

La estructura de directorios de la siguiente manera:

Hay una página de índice en el archivo de plantilla HTML carpeta, colocar una etiqueta, a continuación, haga clic a la solicitud de autorización github:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<a href="https://github.com/login/oauth/authorize?client_id=your_client_id&redirect_uri=http://localhost:8090/callback&state=test&scope=user">授权github登录</a>
</body>
</html>

Nota escrita por encima de redirect_uri escrito http: // localhost: 8090 / devolución de llamada, porque yo quiero crear un nuevo controlador, asignación de dirección a la devolución de llamada, springboot de server.port también configurar el 8090 a:

application.properties:

server.port=8090

okhttp HttpHelper utilizado en el paquete:

package com.github_auth.helper;

import com.squareup.okhttp.*;
import org.springframework.stereotype.Component;

import java.io.IOException;

@Component
public class HttpHelper
{
    public String Get(String url)
    {
        OkHttpClient client = new OkHttpClient();

        Request request = new Request.Builder()
                .url(url)
                .build();
        try
        {
            Response response = client.newCall(request).execute();
            return response.body().string();
        }
        catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    public String Post(String url,String json)
    {
        OkHttpClient client = new OkHttpClient();
        MediaType mediaType = MediaType.parse("application/json; charset=utf-8");
        RequestBody body = RequestBody.create(mediaType, json);
        Request request = new Request.Builder()
                .url(url)
                .post(body)
                .build();
        try
        {
            Response response = client.newCall(request).execute();
            return response.body().string();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        return null;
    }
}

Autorización función de proceso de devolución de llamada:

package com.github_auth.controller;

import com.alibaba.fastjson.JSON;
import com.github_auth.dto.RequestAccessTockenParam;
import com.github_auth.dto.UserInfo;
import com.github_auth.helper.HttpHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;
import javax.sound.midi.Soundbank;

@Controller
public class AuthController {
    @Autowired
    private HttpHelper httpHelper;
    String client_id="your_client_id";
    String client_secret="your_client_secret";

    @RequestMapping("/callback")
    @ResponseBody
    public UserInfo callback(@RequestParam("code") String code)
    {
        //1.code参数为github回调callback_uri时,github传递过来的
        System.out.println("请求callback...,code:"+code);

        RequestAccessTockenParam param=new RequestAccessTockenParam();
        param.setClient_id(client_id);
        param.setClient_secret(client_secret);
        param.setCode(code);//传入code参数
        param.setRedirect_url("http://localhost:8090");
        param.setState("test");

        //获取access token
        String url="https://github.com/login/oauth/access_token";
        String json= JSON.toJSONString(param);
        //2.根据传入的参数(包含code),post请求https://github.com/login/oauth/access_token,获取返回值
        String result= httpHelper.Post(url,json);//access_token=your_client_id&scope=user&token_type=bearer
        System.out.println( "callback result:"+result);

        String[] strs=result.split("&");
        String access_token=strs[0].split("=")[1];//解析access_token

        //3.根据access token,请求https://api.github.com/user获取用户信息
        String url_user="https://api.github.com/user?access_token="+access_token;
        String userInfo=httpHelper.Get(url_user);
        System.out.println("userInfo:"+userInfo);//返回的是一个json字符串

        UserInfo user=JSON.parseObject(userInfo,UserInfo.class);
        return  user;
    }
}


Ejecutar, se entra en la página de inicio:

Supongo que te gusta

Origin www.cnblogs.com/lishuanguan1987/p/12642047.html
Recomendado
Clasificación