ThinkPHP内核系统源码多商户版对接适⽤场景[PC+WAP+]
⼤部分站长都了解美洽系统,就跟这种类似的,可以实现⼀⾏代码接⼊客服,⾮常舒服,⽀持⽆限客服,⽆限坐席!
私有化源码部署,数据可控,稳定可靠。可⾃定义版权、logo。⽀持⽹页、、⼩程序、App等任何程序对接。
客服数量不限,每个客服⼜独⽴管理后台和账户密码。每个账户管理可以添加N个客服并且可以分组。
双向模板消息通知。⽀持商品推送,对客服评价。⽀持客户分组。
⽀持设置问候语,进⼊对话⾃动发送消息。可只能分配客服和转接
安装使⽤:下载程序,上传服务器解压,设置⽬录public
⽂件:
以下内容⽆关:
-------------------------------------------分割线---------------------------------------------
因为前⼀段时间做了⼀个系统持续操作期间⾃动刷新token有效性的需求,然后就想着⼀个空闲时间总结⼀下JWT,所以今天就简单的记录⼀下⾃⼰了解的内容。
JWT是什么
系统大全JWT全称是JSON Web Token,是⼀个开放标准,它定义了⼀种紧凑的、⾃包含的结构,可⽤于在服务之间信息传递和授权认证。
信息传递:通过签名,可以确保传递的信息不被篡改且不是伪造的。
授权认证:通过JWT⽣成的token信息进⾏验签,确保是⾃⼰服务签发的token信息。
JWT的格式:
JWT由三部分组成,各部分之间使⽤[.]进⾏连接。各部分分别是:Header(头信息)、Payload(载荷)和Signature(签名)。
其格式如下:
header.payload.signature
使⽤场景
前端页⾯点击登录,后端验证⽤户名密码通过后,使⽤JWT⽣成token信息返回给前端,前端使⽤登录token请求各个接⼝。
JWT使⽤⽰例
⾸先引⼊JWT jar包如下:
io.jsonwebtoken jjwt 0.6.0 Java⽰例代码如下:
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jws;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.*;
public class JWTDemo {
public static void main(String[] args) {
String issue = "ISSUE_CESHI";
// 签名算法
SignatureAlgorithm algorithm = SignatureAlgorithm.HS256;
// 签名秘钥
String secret = "CESHI_SECRET";
int timeout = 60 * 60 * 6;
long currentTime = System.currentTimeMillis();
Map<String,Object> map = new HashMap<>();
map.put("userId","10");
map.put("userName","张三");
String token = Jwts.builder()
.signWith(algorithm, secret)
.setClaims(map)
.setId(UUID.randomUUID().toString())
.setIssuedAt(new Date(currentTime))
.setIssuer(issue)
.setExpiration(new Date(currentTime + timeout * 1000))
pact();
System.out.println(token);
Jws<Claims> parseResult3 = Jwts.parser().setSigningKey(secret).parseClaimsJws(token);
}
}
上⾯演⽰代码⽣成的token信息如下:
然后将⽣成的token进⾏解析得到如下内容:
可以看到载荷⾥⾯有我们设置的userId和userName信息。
同时,JWT规定了7个官⽅的字段,如下:
iss (issuer):签发⼈
exp (expiration time):过期时间
sub (subject):主题
aud (audience):受众
nbf (Not Before):⽣效时间
iat (Issued At):签发时间
jti (JWT ID):编号
需要特别注意的是,JWT的header和body部分都是⽤Base64进⾏编码的,本⾝不具有加密属性,所以在body中不能存储敏感信息。
系统持续操作⾃动刷新token
JWT的⼀⼤优点就是token信息存储在客户端,服务端不⽤存储对应的授权信息。因此,它的⼀⼤缺点就是⼀旦token颁发了就没办法进⾏撤销,只有等待token⾃动失效。
如果想要实现token失效前撤销,那么只能借助其他⼿段,⽐如使⽤redis缓存,token验证除了JWT本⾝的验签外,还需要判断redis缓存信息,但是这样做有违JWT的设计本意。
说说在项⽬中遇到的需求:就是在⽤户持续间隔时间内操作系统,那么系统内部应该⾃动刷新token信息,⽽不是在固定时间点强⾏要求重新登录。⽐如token颁发的有效期是5个⼩时,然后⽤户⼀直操作到4⼩时59分59秒,然后在5⼩时0分1秒的时候提交⼀个表格,这时如果因为token失效直接跳转到登录页⾯,这样的⽤户体验感是极为糟糕的。
所以为了解决上⾯的场景,在写这个需求的时候,特地调研了⼀下各种⽅案,最后综合了⼀下,决定采⽤redis实现。⽅案如下:
颁发⼀个⾜够时长的token(⽐如15天),然后存储在redis中,redis中设置短的有效期,⽐如6⼩时。从⽽实现在6⼩时内有效操作免登录。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论