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

devtools/2024/9/25 17:18:48/

 

单机的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

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAbWFzdGVyQ29kZV93eQ==,size_20,color_FFFFFF,t_70,g_se,x_16

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

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAbWFzdGVyQ29kZV93eQ==,size_20,color_FFFFFF,t_70,g_se,x_16

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

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAbWFzdGVyQ29kZV93eQ==,size_20,color_FFFFFF,t_70,g_se,x_16

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

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAbWFzdGVyQ29kZV93eQ==,size_20,color_FFFFFF,t_70,g_se,x_16

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

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAbWFzdGVyQ29kZV93eQ==,size_20,color_FFFFFF,t_70,g_se,x_16

 

新建LoginController,实现注册方法

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAbWFzdGVyQ29kZV93eQ==,size_20,color_FFFFFF,t_70,g_se,x_16

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

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAbWFzdGVyQ29kZV93eQ==,size_20,color_FFFFFF,t_70,g_se,x_16

 watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAbWFzdGVyQ29kZV93eQ==,size_20,color_FFFFFF,t_70,g_se,x_16

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

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAbWFzdGVyQ29kZV93eQ==,size_17,color_FFFFFF,t_70,g_se,x_16

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

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAbWFzdGVyQ29kZV93eQ==,size_20,color_FFFFFF,t_70,g_se,x_16

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

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAbWFzdGVyQ29kZV93eQ==,size_20,color_FFFFFF,t_70,g_se,x_16

 

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

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAbWFzdGVyQ29kZV93eQ==,size_20,color_FFFFFF,t_70,g_se,x_16

 

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

 

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

 

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

3d9879f296b8495bbb7584d75e7f3476.jpeg

 

 

 

 

 

 

 


http://www.ppmy.cn/devtools/29852.html

相关文章

分布式八股文

什么是分布式系统? 集中式系统,可以理解为将一整个系统的所有功能,包括数据库各种都部署在一起,统一向外提供服务。分布式就是将集中式系统拆分成多个系统,每一个系统单独对外提供服务,整一个提供一整套服务。意味着能够采用更多的服务器,CPU、内存、存储资源增加,能够…

J2EE模式

系列文章目录 J2EE模式特别关注表示层,这些模式是由 Sun Java Center 鉴定的, 包括: 1、 MVC模式(MVCPattern); 2、 业务代表模式(BusinessDelegatePattern); 3、 组合…

零知识证明与同态加密:隐私计算的双剑

PrimiHub一款由密码学专家团队打造的开源隐私计算平台,专注于分享数据安全、密码学、联邦学习、同态加密等隐私计算领域的技术和内容。 在数字时代,隐私保护已成为全球关注的焦点。隐私计算作为解决数据隐私问题的关键技术,其核心目标是在不泄…

密码学基础练习五道 RSA、elgamal、elgamal数字签名、DSA数字签名、有限域(GF)上的四则运算

1.RSA #include <stdlib.h>#include <stdio.h>#include <string.h>#include <math.h>#include <time.h>#define PRIME_MAX 200 //生成素数范围#define EXPONENT_MAX 200 //生成指数e范围#define Element_Max 127 //加密单元的…

Telegram电报+86手机接收验证码及账号解封方法

Telegram电报86手机无法接受验证码目前可用Telegram X获取&#xff0c;测试可用。获取验证码的前提是需要确保网络通畅 不要同一时段获取超过太多验证码&#xff0c;获取过多验证码将会很长一段时间收不到验证码&#xff0c;6小时最多获取2次验证码。 方法1&#xff1a;使用官…

4月份全球市场推出的18款网络安全热点产品和服务:生成式AI应用主导安全产品创新

CSO在线追踪了4份全球市场推出的18代表性网络安全产品和服务&#xff0c;从中可以观察网络安全产品创新趋势和风向。 1、Salt Security 在其API保护平台添加 OAuth安全产品 4月25日&#xff1a;Salt Security 在其API保护平台中添加了新的 OAuth 安全产品&#xff0c;以帮助组…

使用递归函数,求n的k次方的值

结果如下所示&#xff1a; 思路&#xff1a; Pow(n,k) 1.k>0, n*Pow(n,k-1) 2.k0, 1 3.k<0, 1.0/Pow(n,-k) 代码如下&#xff1a; #include<stdio.h> double Pow(int n, int k) {if (k > 0)return n * Pow(n, k - 1);else if (k 0)return 1;else retu…

制作一个RISC-V的操作系统十六-系统调用

文章目录 用户态和内核态mstatus设置模式切换核心流程封装代码背景解释代码示例解析解释目的 用户态和内核态 mstatus设置 此时UIE设置为1和MPIE为1&#xff0c;MPP设置为0 代表当前权限允许UIE中断发生&#xff0c;并且在第一个mret后将权限恢复为用户态&#xff0c;同时MIE也…