Java笔记-模拟QQ三方登录(单点登录2.0)
本次例子模拟这样的情况:
一共有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)相关推荐
- Java程序模拟QQ空间登录 - 并模拟刷说说的赞(图文) 注意:腾讯修改了加密算法,已失效(2015-01-31)
Java程序模拟QQ空间登录 - 并模拟刷说说的赞 背景:在2013-10-25的一天,有个friend在QQ问我:"post登陆QQ空间抓取不到post的数据".于是故事就开始了 ...
- php qq授权_PHP模拟QQ网页版授权登录的案例
PHP模拟QQ网页版授权登录的案例 发布时间:2020-10-31 01:28:09 来源:亿速云 阅读:78 作者:小新 PHP模拟QQ网页版授权登录的案例?这个问题可能是我们日常学习或工作经常见到 ...
- Java实现模拟QQ空间图片上传
Java实现模拟QQ空间图片上传 首先看效果: 首先编写我们的上传jsp代码,如下: <%@ page language="java" contentType="t ...
- java cookie p3p_利用P3P实现单点登录和COOKIE的跨域读写
首先说明,同一个顶级域名的情况我不说什么,很简单,就一个Cookie的Domain属性. 下面来说顶级域名不同的情况. 有时候我们会有这么一种需求:当我们登录A网站www.a.com时,同时也要能登录 ...
- Java项目模拟QQ群聊和私聊(网络编程+多线程)
[文末获取资源] 前几天学习了多线程,最近在学习网络编程,了解了UDP之后又学习了TCP,听一下大佬说,要看看你这两个东西掌握的怎么样,最好的办法就是写一个模拟QQ群聊和私聊,经过这几天的学习,以及不 ...
- 多域名同步登录,单点登录SSO
[多个域名+1个登录域名.登录成功后将其他多个域名分配SESSION值,即实现了多域名同时登录的情况.登出同理!] session_start();//这里 会默认创建一个COOKIE名为:PHPSE ...
- Java工作笔记-Nginx配置IPHash(单点登录)
拓扑图是这样的 iphash实现原理: 记录ip地址,生成iphash值,用这个值去绑定一台服务器,以后这个client的请求都会访问到绑定到的服务器中,这里生成iphash一般是通过Nginx进行生 ...
- java mirai-2.15 qq机器人扫码登录或springboot项目进行扫码登录
请下载我的jar包在项目中引用 [java-mirai-qrcode-0.1.jar] jar包有参考 mirai-console-dev-qrlogin-0.1.7在java中整合 适应mirai版 ...
- kisso:java 基于 Cookie 的 SSO(单点登录) 中间件 kisso。
源码:https://gitee.com/baomidou/kisso 示例说明:https://blog.csdn.net/q826qq1878/article/details/76179591
最新文章
- 开发日记 20210311 重新定义未来
- python打开是什么颜色-(原)python中matplotlib的颜色及线条控制
- 结束处理程序——Windows核心编程学习手札之二十三
- 【Linux】cp命令
- Monkey稳定性测试初探(二)
- Undefined和Null的区别
- python控制苹果手机触摸屏失灵怎么办_苹果6sp屏幕失灵怎么办 这些解决方法绝对最易学...
- html页面字体美化,网页字体的美化-网页设计,HTML/CSS
- 一种新的UI测试方法:视觉感知测试
- 网页连接服务器失败是怎么回事,网页怎么连接服务器失败是怎么回事
- A站工具姬pc电脑版
- U盘文件变成快捷方式的解决方案
- android命令大全 pdf,android调试桥(adb)常用命令.pdf
- html打印时显示不全,打印表格时内容显示不完整怎么办?四种方法解决WPS不完整问题...
- Unable to negotiate with xx.xx port xx: no matching host key type found. Their offer: ssh-rsa....
- R包学习——reshape包中melt、cast、merge函数用法
- 一切问题都可以是最优化
- 请求服务无响应Dispatcher has no subscribers
- oracle 去摸_oracle摸底考试
- Web页面布局上的幽灵事件 -- 外边距合并折叠解惑