本次例子模拟这样的情况:

一共有2个spring boot应用:

一个是某公司的web,第二个是QQ服务端。

某公司的应用为127.0.0.1:8082

QQ服务端为127.0.0.1:8081

演示如下:

点击使用QQ登录:

在弹出的界面输入数据点击登录后:

关键代码如下:

某公司web端:

MyController.java

package cn.it1995.login.controller;import cn.it1995.login.util.CookieUtil;
import cn.it1995.login.util.Result;
import com.alibaba.fastjson.JSON;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;@RestController
public class MyController {@Autowiredprivate RestTemplate restTemplate;private static final String USER_KEY="user_key";private ConcurrentMap<String, Object> user = new ConcurrentHashMap<>();@GetMapping("/getUser")public Object getUser(HttpServletRequest request, HttpServletResponse response){String loginCookie = CookieUtil.getLoginCookie(request, response);Object o = user.get(loginCookie);return Result.success(o);}@PostMapping("/loginByQQ")public Object loginByQQ(String token, HttpServletResponse response, HttpServletRequest request){MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap();paramMap.add("token", token);ResponseEntity<Object> objectResponseEntity = restTemplate.postForEntity("http://127.0.0.7:8081/getLoginInfo", paramMap, Object.class);Object body = objectResponseEntity.getBody();String uuid = CookieUtil.setLoginCookie(request, response);//json标准化String newJson = body.toString().replace("=", ":");System.out.println(newJson);Map map = JSON.parseObject(newJson, Map.class);Map data = JSON.parseObject(map.get("data").toString(), Map.class);user.put(uuid, data);return Result.success();}
}

QQ服务端:

UserController.java

package cn.it1995.qqServer.controller;import cn.it1995.qqServer.util.JwtUtil;
import cn.it1995.qqServer.util.Result;
import com.alibaba.fastjson.JSON;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;import java.util.HashMap;
import java.util.Map;
import java.util.UUID;@Controller
public class UserController {@ResponseBody@RequestMapping("/login")public Object login(@RequestParam("username") String username,@RequestParam("password") String password){Map<String, Object> map = new HashMap<>();map.put("username", username);map.put("password", password);String jwt = JwtUtil.createJWT(UUID.randomUUID().toString(), JSON.toJSONString(map), 3600 * 24);return jwt;}@ResponseBody@RequestMapping("/getLoginInfo")public Object getLoginInfo(String token){String subject = JwtUtil.parseJWT(token).getSubject();return Result.success().data(subject);}}

项目打包下载地址:

https://github.com/fengfanchen/Java/tree/master/SSODemo

Java笔记-模拟QQ三方登录(单点登录2.0)相关推荐

  1. Java程序模拟QQ空间登录 - 并模拟刷说说的赞(图文) 注意:腾讯修改了加密算法,已失效(2015-01-31)

    Java程序模拟QQ空间登录 - 并模拟刷说说的赞 背景:在2013-10-25的一天,有个friend在QQ问我:"post登陆QQ空间抓取不到post的数据".于是故事就开始了 ...

  2. php qq授权_PHP模拟QQ网页版授权登录的案例

    PHP模拟QQ网页版授权登录的案例 发布时间:2020-10-31 01:28:09 来源:亿速云 阅读:78 作者:小新 PHP模拟QQ网页版授权登录的案例?这个问题可能是我们日常学习或工作经常见到 ...

  3. Java实现模拟QQ空间图片上传

    Java实现模拟QQ空间图片上传 首先看效果: 首先编写我们的上传jsp代码,如下: <%@ page language="java" contentType="t ...

  4. java cookie p3p_利用P3P实现单点登录和COOKIE的跨域读写

    首先说明,同一个顶级域名的情况我不说什么,很简单,就一个Cookie的Domain属性. 下面来说顶级域名不同的情况. 有时候我们会有这么一种需求:当我们登录A网站www.a.com时,同时也要能登录 ...

  5. Java项目模拟QQ群聊和私聊(网络编程+多线程)

    [文末获取资源] 前几天学习了多线程,最近在学习网络编程,了解了UDP之后又学习了TCP,听一下大佬说,要看看你这两个东西掌握的怎么样,最好的办法就是写一个模拟QQ群聊和私聊,经过这几天的学习,以及不 ...

  6. 多域名同步登录,单点登录SSO

    [多个域名+1个登录域名.登录成功后将其他多个域名分配SESSION值,即实现了多域名同时登录的情况.登出同理!] session_start();//这里 会默认创建一个COOKIE名为:PHPSE ...

  7. Java工作笔记-Nginx配置IPHash(单点登录)

    拓扑图是这样的 iphash实现原理: 记录ip地址,生成iphash值,用这个值去绑定一台服务器,以后这个client的请求都会访问到绑定到的服务器中,这里生成iphash一般是通过Nginx进行生 ...

  8. java mirai-2.15 qq机器人扫码登录或springboot项目进行扫码登录

    请下载我的jar包在项目中引用 [java-mirai-qrcode-0.1.jar] jar包有参考 mirai-console-dev-qrlogin-0.1.7在java中整合 适应mirai版 ...

  9. kisso:java 基于 Cookie 的 SSO(单点登录) 中间件 kisso。

    源码:https://gitee.com/baomidou/kisso 示例说明:https://blog.csdn.net/q826qq1878/article/details/76179591

最新文章

  1. 开发日记 20210311 重新定义未来
  2. python打开是什么颜色-(原)python中matplotlib的颜色及线条控制
  3. 结束处理程序——Windows核心编程学习手札之二十三
  4. 【Linux】cp命令
  5. Monkey稳定性测试初探(二)
  6. Undefined和Null的区别
  7. python控制苹果手机触摸屏失灵怎么办_苹果6sp屏幕失灵怎么办 这些解决方法绝对最易学...
  8. html页面字体美化,网页字体的美化-网页设计,HTML/CSS
  9. 一种新的UI测试方法:视觉感知测试
  10. 网页连接服务器失败是怎么回事,网页怎么连接服务器失败是怎么回事
  11. A站工具姬pc电脑版
  12. U盘文件变成快捷方式的解决方案
  13. android命令大全 pdf,android调试桥(adb)常用命令.pdf
  14. html打印时显示不全,打印表格时内容显示不完整怎么办?四种方法解决WPS不完整问题...
  15. Unable to negotiate with xx.xx port xx: no matching host key type found. Their offer: ssh-rsa....
  16. R包学习——reshape包中melt、cast、merge函数用法
  17. 一切问题都可以是最优化
  18. 请求服务无响应Dispatcher has no subscribers
  19. oracle 去摸_oracle摸底考试
  20. Web页面布局上的幽灵事件 -- 外边距合并折叠解惑

热门文章

  1. Nagios监控平台完全攻略 (二)
  2. 8086CPU的8位寄存器数据存储情况
  3. GridView去掉边框
  4. 在IT行业对专业知识的掌握能力
  5. 最优食品处方:14种改变你一生的食品
  6. 经典面试题(48):以下代码将输出的结果是什么?
  7. 快来!前端君喊你加入快驾网智囊团
  8. php更多式样,php_1
  9. matlab fname pname,求大神帮我解释一下matlab最后几行是什么意思
  10. 虚拟邮箱怎么设置方法_腾讯企业邮箱邮件列表白名单设置方法