import life.majiang.community.dto.AccessTokenDTO;
import life.majiang.community.dto.GitHubUser;
import com.alibaba.fastjson.JSON;
import okhttp3.*;
import org.springframework.stereotype.Component;
import java.io.IOException;
@Component
public class GitHubProvider {
private static final MediaType MediaType_JSON
= MediaType.get("application/json; charset=utf-8");
public String getAccessToken(AccessTokenDTO accessTokenDTO){
OkHttpClient client = new OkHttpClient();
RequestBody body = RequestBody.create(JSON.toJSONString(accessTokenDTO), MediaType_JSON);
Request request = new Request.Builder()
.url("https://github.com/login/oauth/access_token")
.post(body)
.build();
try (Response response = client.newCall(request).execute()) {
String resstring = response.body().string();
String token =resstring.split("&")[0]
.split("=")[1];
return token;
}catch (IOException e) {
e.printStackTrace();
}
return null;
}
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 res = response.body().string();
GitHubUser gitHubUser = JSON.parseObject(res, GitHubUser.class);
return gitHubUser;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
3、AuthorizeController.java
---------------------------
package life.majiang.community.controller;
import life.majiang.community.dto.AccessTokenDTO;
import life.majiang.community.dto.GitHubUser;
import life.majiang.community.provider.GitHubProvider;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
/**
*/
@Controller
public class AuthorizeController {
@Autowired
private GitHubProvider gitHubProvider;
@Value("${github.client.id}")
private String clientId;
@Value("${github.client.secret}")
private String clientSecret;
@Value("${github.redirect.uri}")
private String redirectURI;
@GetMapping("/callback")
public String callBack(@RequestParam(name = "code")String code,
@RequestParam(name = "state") String state,
HttpServletRequest request){
AccessTokenDTO accessTokenDTO = new AccessTokenDTO();
accessTokenDTO.setClient_id(clientId);
accessTokenDTO.setClient_secret(clientSecret);
accessTokenDTO.setCode(code);
accessTokenDTO.setRedirect_uri(redirectURI);
accessTokenDTO.setState(state);
String accessToken = gitHubProvider.getAccessToken(accessTokenDTO);
GitHubUser user = gitHubProvider.getUser(accessToken);
if(user != null){
//登录成功
request.getSession().setAttribute("user",user);
return "redirect:index";
}else {
//登录失败
return "redirect:index";
}
//return "index"+user.toString();
}
}
4、HTTP Request
---------------
知其然不知其所以然,大厂常问面试技术如何复习?
1、热门面试题及答案大全
面试前做足功夫,让你面试成功率提升一截,这里一份热门350道一线互联网常问面试题及答案助你拿offer
面试宝典+书籍+核心知识获取:戳这里免费下载!诚意满满!!!
2、多线程、高并发、缓存入门到实战项目pdf书籍
3、文中提到面试题答案整理
4、Java核心知识面试宝典
覆盖了JVM 、JAVA集合、JAVA多线程并发、JAVA基础、Spring原理、微服务、Netty与RPC、网络、日志、Zookeeper、Kafka、RabbitMQ、Hbase、MongoDB 、Cassandra、设计模式、负载均衡、数据库、一致性算法 、JAVA算法、数据结构、算法、分布式缓存、Hadoop、Spark、Storm的大量技术点且讲解的非常深入
日志、Zookeeper、Kafka、RabbitMQ、Hbase、MongoDB 、Cassandra、设计模式、负载均衡、数据库、一致性算法 、JAVA算法、数据结构、算法、分布式缓存、Hadoop、Spark、Storm的大量技术点且讲解的非常深入**
[外链图片转存中…(img-ZchpIbx6-1628389168661)]
[外链图片转存中…(img-Hnp7jobf-1628389168662)]
[外链图片转存中…(img-EUp8JIts-1628389168662)]