Java最全Day423,面试官老爱问适配器模式与外观模式

最后

码字不易,觉得有帮助的可以帮忙点个赞,让更多有需要的人看到

又是一年求职季,在这里,我为各位准备了一套Java程序员精选高频面试笔试真题,来帮助大家攻下BAT的offer,题目范围从初级的Java基础到高级的分布式架构等等一系列的面试题和答案,用于给大家作为参考

以下是部分内容截图
架构面试专题及架构学习笔记导图.png

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • client_id:APP KEY;

  • client_secret:APP SECRET;

  • redirect_uri:认证后重定向的地址 http://www.achangmall.com/success

  • code:第二步返回的 code 值;

  • 返回响应报文

{

“access_token”: “2.00pDpxyGd3J5bEef6b98778e0ZKsu4”,

“remind_in”: “157679999”,

“expires_in”: 157679999,

“uid”: “6397634785”,

“isRealName”: “true”

}

  • 根据 access_token 可以获取微博提供的公共接口数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fGArdzEX-1634566930469)(C:/Users/PePe/AppData/Roaming/Typora/typora-user-images/image-20211018212319192.png)]


3、代码举例

  • com.achang.achangmall.auth.vo.SocialUser

@Data

public class SocialUser {

private String access_token;

private String remind_in;

private long expires_in;

private String uid;

private String isRealName;

}

  • com.achang.achangmall.auth.controller.OAuth2Controller

@Slf4j

@Controller

public class OAuth2Controller {

@Autowired

private MemberFeignService memberFeignService;

@GetMapping(value = “/oauth2.0/weibo/success”)

public String weibo(@RequestParam(“code”) String code, HttpSession session) throws Exception {

Map<String, String> map = new HashMap<>();

map.put(“client_id”,“2077705774”);

map.put(“client_secret”,“40af02bd1c7e435ba6a6e9cd3bf799fd”);

map.put(“grant_type”,“authorization_code”);

map.put(“redirect_uri”,“http://auth.achangmall.com/oauth2.0/weibo/success”);

map.put(“code”,code);

//1、根据用户授权返回的code换取access_token

HttpResponse response = HttpUtils.doPost(“https://api.weibo.com”, “/oauth2/access_token”, “post”, new HashMap<>(), map, new HashMap<>());

//2、处理

if (response.getStatusLine().getStatusCode() == 200) {

//获取到了access_token,转为通用社交登录对象

String json = EntityUtils.toString(response.getEntity());

//String json = JSON.toJSONString(response.getEntity());

SocialUser socialUser = JSON.parseObject(json, SocialUser.class);

//知道了哪个社交用户

//1)、当前用户如果是第一次进网站,自动注册进来(为当前社交用户生成一个会员信息,以后这个社交账号就对应指定的会员)

//登录或者注册这个社交用户

System.out.println(socialUser.getAccess_token());

//调用远程服务

R oauthLogin = memberFeignService.oauthLogin(socialUser);

if (oauthLogin.getCode() == 0) {

MemberResponseVo data = oauthLogin.getData(“data”, new TypeReference() {});

log.info(“登录成功:用户信息:{}”,data.toString());

//1、第一次使用session,命令浏览器保存卡号,JSESSIONID这个cookie

//以后浏览器访问哪个网站就会带上这个网站的cookie

//TODO 1、默认发的令牌。当前域(解决子域session共享问题)

//TODO 2、使用JSON的序列化方式来序列化对象到Redis中

session.setAttribute(“userInfo”,data);

//2、登录成功跳回首页

return “redirect:http://achangmall.com”;

} else {

return “redirect:http://auth.achangmall.com/login.html”;

}

} else {

return “redirect:http://auth.achangmall.com/login.html”;

}

}

}

  • com.achang.achangmall.member.entity.MemberEntity

/**

  • 社交登录UID

*/

private String socialUid;

/**

  • 社交登录TOKEN

*/

private String accessToken;

/**

  • 社交登录过期时间

*/

private long expiresIn;

  • com.achang.achangmall.member.controller.MemberController

@PostMapping(value = “/oauth2/login”)

public R oauthLogin(@RequestBody SocialUser socialUser) throws Exception {

MemberEntity memberEntity = memberService.login(socialUser);

if (memberEntity != null) {

return R.ok().setData(memberEntity);

} else {

return R.error();

}

}

  • com.achang.achangmall.member.service.impl.MemberServiceImpl

@Override

public MemberEntity login(SocialUser socialUser) throws Exception {

//具有登录和注册逻辑

String uid = socialUser.getUid();

//1、判断当前社交用户是否已经登录过系统

MemberEntity memberEntity = this.baseMapper.selectOne(new QueryWrapper().eq(“social_uid”, uid));

if (memberEntity != null) {

//这个用户已经注册过

//更新用户的访问令牌的时间和access_token

MemberEntity update = new MemberEntity();

update.setId(memberEntity.getId());

update.setAccessToken(socialUser.getAccess_token());

update.setExpiresIn(socialUser.getExpires_in());

this.baseMapper.updateById(update);

memberEntity.setAccessToken(socialUser.getAccess_token());

memberEntity.setExpiresIn(socialUser.getExpires_in());

return memberEntity;

} else {

//2、没有查到当前社交用户对应的记录我们就需要注册一个

MemberEntity register = new MemberEntity();

最后

现在正是金三银四的春招高潮,前阵子小编一直在搭建自己的网站,并整理了全套的**【一线互联网大厂Java核心面试题库+解析】:包括Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等**

image

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

va基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等**

[外链图片转存中…(img-NEfEqCK2-1715302765437)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 10
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值