Hutool 是一款可以提高开发效率的 Java 工具类。详情请看 官方文档
引入核心依赖
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.0.3</version>
</dependency>
也可以单独引入。
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-http</artifactId>
<version>5.0.3</version>
</dependency>
先登记应用,进入路径,头像 => settings => Developer settings => OAuth Apps => New OAuth App。

填写下面的表单,按字面意思填写即可,要特别注意的是,Homepage URL 填写你的主页地址,比如:http://localhost:8080
Authorization callback URL 用来告诉 github 你要重定向的地址 (redirect_uri)。

完成后可以看到这两个字段,分别是客户端的 id 和 密钥。

后端代码
@CrossOrigin
@RestController
public class LoginController {
@RequestMapping("/oauth/redirect")
public ResultDTO githubLogin(@RequestParam("code") String code){
//获取授权码 -> 请求令牌
Map<String, Object> params = new HashMap<>();
params.put("client_id", "15cecaffa2691a8b740e");
params.put("client_secret", "7102c4988d93b035dd63e8b03f1f6f263779a4bf");
params.put("code", code);
String accessToken = HttpUtil.post(
"https://github.com/login/oauth/access_token", params);
accessToken = "token " + accessToken.split("&")[0].split("=")[1];
Console.log(accessToken);
//使用令牌获取用户数据
String user = HttpRequest.get("https://api.github.com/user")
.header("Authorization", accessToken)//头信息,多个头信息多次调用此方法即可
.timeout(20000)//超时,毫秒
.execute().body();
Console.log(user);
User userbean = JSONUtil.toBean(user, User.class);
return ResultDTO.ok(userbean);
}
}
/oauth/redirect 是重定向的地址,其中 client_id,client_secret,这两个参数用来确认客户端身份。
前端代码
<a class="nav-link" href="https://github.com/login/oauth/authorize?
client_id=15cecaffa2691asdddas
redirect_uri=http://localhost:8080/oauth/redirect">登录</a>
返回结果,可以按自己的需要选取字段。

- 跳转到 github 授权页面。
- 用户确认登录。
- 重定向到指定的后端 url 地址(redirect_uri ),伴有授权码(code=75667f)。
- 后端接口获取授权码,作为参数再发一个向 Github 要令牌的请求。
- 拿到令牌,向 Github 请求数据。
详情请看 官方文档。
end