前言
结合网关相关知识食用更佳
业务图解
流程解读
- 客户端-登录界面(通常手机验证码登录) 1.填写手机号 2.发送验证码 3.填写验证码 4.勾选新用户自动注册
- 服务端-用户验证 1.验证账号验证码是否正确 2.验证用户是否存在(不存在出初始化用户信息) 3.完成验证生成token 4.将token返回给客户端
用户信息设计
字段 | 描述 | 类型 | 是否唯一 |
telephone | 手机号 | varchar | 是 |
nickname | 昵称 | varchar | 根据业务决定是否可重复 |
account | 账号 | varchar | 是 |
password | 密码 | varchar | 否 |
create_time | 创建时间 | datetime | 否 |
modify_time | 修改时间 | datetime | 否 |
…省略小程序授权码等等、根据自身业务进行增加 |
验证流程图解
关于token过期时间
关于业务请求token验证
关于登出操作
关于匿名请求(免登录)
方案1:授权token,限制单位时间请求次数
技术实现
- 1.提供一个授权token管理页面,主要管理token使用者,token的值,单位时间访问次数(如每分钟60次)
- 2.增删改查,将授权token存放到缓存中,使用map进行存储,key为token,值为每分钟访问次数
- 3.单位时间计数缓存,过期时间为1分钟
请求次数检查代码实现
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import java.util.concurrent.TimeUnit;
/**
* 授权token请求限制缓存
*
* @author 热黄油啤酒
* @since 2021-11-01
*/
@Component
public class AuthTokenRequestLimitCache {
@Autowired
private RedisTemplate<String, Integer> redisTemplate;
private static final String AUTH_TOKEN_LIMIT_KEY_PREFIX = "auth_token_limit";
/**
* 请求次数+1并检查是否超限
*
* @param token
* @return 是否放行
*/
public boolean incrementWithCheck(String token) {
// 1.获取token请求次数限制,获取为null代表授权配置已被修改,此token已经不具备权限
Integer limit = getLimit(token);
if (limit == null) {
return false;
}
// 2.组装缓存key,读取缓存
String key = String.join(":", AUTH_TOKEN_LIMIT_KEY_PREFIX, token);
Integer count = redisTemplate.opsForValue().get(key);
// 3.没有值代表一分钟内没有请求产生了
if (count == null) {
// 初始化值
redisTemplate.opsForValue().increment(key);
// 设置过期时间
redisTemplate.expire(key, 1L, TimeUnit.MINUTES);
return true;
}
// 自增并获取当前值 大于限制的话 返回false 网关过滤器返回提示信息(如请求过于频繁)
Long inc = redisTemplate.opsForValue().increment(key);
return inc <= limit;
}
/**
* 获取限值
*
* @param token
* @return
*/
public Integer getLimit(String token) {
Object limit = redisTemplate.opsForHash().get("auth_token_limit", token);
return limit == null ? null : (Integer) limit;
}
}
复制代码
方案2:请求路径正则校验
关于黑名单
- 1.用户管理页面提供一个拉黑的按钮,拉黑后,这些用户的id会存储到一个set集合中去
- 2.登录时候检查用户是否在黑名单中,是则拒绝登录并提示
- 3.如果用户已经登录后进行拉黑操作,网关会在鉴权通过后检查用户是否在黑名单中,是则删除token对应缓存,返回401,401就会跳到登录页,步骤2就会进行拦截。
总结
好了,这篇文章的内容营销圈就和大家分享到这里,如果大家对网络推广引流和网络创业项目感兴趣,可以添加微信:Sum8338 备注:营销圈引流学习,我拉你进直播课程学习群,每周135晚上都是有实战的推广引流技术和网络创业项目课程分享,当然是免费学!
版权声明:本站部分文章来源互联网用户自发投稿,主要目的在于分享信息,版权归原作者所有,不承担相关法律责任。如有侵权请联系我们反馈邮箱yingxiaoo@foxmail.com,我们将在7个工作日内进行处理,如若转载,请注明本文地址:https://www.yingxiaoo.com/132032.html