中移在线ChinaMobile系统单机和分布式应用的登录校验解决方案

单机的Tomcat应用登录校验:

用户首次登录成功后,服务端会创建一个Session会话,客户端会生成一个sessionid,客户端会把sessionid保存到cookie里,每次请求都携带这个sessionid,服务端通过校验来判断是拦截还是放行

分布式应用中Session共享登录校验:

真实的应用不可能单节点部署,尤其是像中移动,中电信这种较大型的项目,所以就有多个节点登录session共享的问题需要解决。tomcat支持session共享,但是有广播风暴;尤其用户量大的时候,占用资源非常严重

推荐使用Redis来存储token:

服务端使用UUID生成随机64位或者128位token,放入redis中,然后返回给客户端并存储在cookie中,用户每次访问都携带此token,服务端去redis中校验是否有此用户即可

分布式应用登录校验解决方案Json Web Token

Jwt是一个开放标准,他定义了一种用于简洁,自包含的用于通信双方之间以Json对象的形式安全传递信息的方法,可以使用HMAC算法或者RSA的公钥对其签名

简单来说,就是通过一定规范生成token,然后通过解密算法逆向解密,这样就可以获得用户信息

Json Web Token的封装通用方法,JwtTokenUtil

方法有创建token,判断token是否已过期,校验token等

新建一个拦截器类,实现HandlerInterceptor接口,注入Bean,UserService

在重写的preHandle方法里获取token并解密,如果解析不到,通过工具类反馈给客户端无权限的提示,如果token过期,提示"重新登录"

再新建Config类实现WebMvcConfigurer接口,注入拦截器bean,在addInterceptors里配置拦截路径,调用excludePathPatterns方法放行需要放行的资源

新建LoginController,实现注册方法

然后实现Login方法和用来测试用的update方法

接下来用Postman工具来进行测试,发送Json数据到后台,成功响应

测试登录,登录响应成功并返回了token密钥

然后我们测试客户端携带token,访问update方法。由于update方法路径我没有配置放行,所以请求会被拦截,在拦截中校验token,判断是否放行

我们模拟黑客拦截获取到token并进行篡改,再访问,看后台如何响应

这是在JwtTokenUtil里配置了解析方法,后台解析不到header里set的数据,所以报错

中国移动用户人数上亿,给后台数据库带来的瞬间并发和后台登录压力可想而知。所以大型项目都采用前后端分离,服务器分布式集群部署,这样可以把压力分散到各个节点,每个服务器节点只负责处理一部分的功能

腾讯的企业级分布式数据库TD-SQL、TD-SQL-A 在处理大数据,数据冗余,数据高并发等方面,提供了较好的解决方案

相关推荐
bagadesu26 分钟前
使用Docker构建Node.js应用的详细指南
java·后端
没有bug.的程序员26 分钟前
Spring Cloud Gateway 性能优化与限流设计
java·spring boot·spring·nacos·性能优化·gateway·springcloud
洛_尘1 小时前
JAVA EE初阶 2: 多线程-初阶
java·开发语言
Slow菜鸟2 小时前
Java 开发环境安装指南(五) | Git 安装
java·git
lkbhua莱克瓦243 小时前
Java基础——方法
java·开发语言·笔记·github·学习方法
q***71853 小时前
海康威视摄像头ISUP(原EHOME协议) 摄像头实时预览springboot 版本java实现,并可以在浏览器vue前端播放(附带源码)
java·前端·spring boot
_Jimmy_3 小时前
JUC包里的同步组件主要实现了AQS的哪些主要方法
java
范纹杉想快点毕业3 小时前
《嵌入式开发硬核指南:91问一次讲透底层到架构》
java·开发语言·数据库·单片机·嵌入式硬件·mongodb
大G的笔记本4 小时前
Java常见设计模式面试题(高频)
java·开发语言·设计模式
老鼠只爱大米4 小时前
Java设计模式之建造者模式(Builder)详解
java·设计模式·建造者模式·builder·23种设计模式