Token如何生成?

简介: Token如何生成?

Token --> 在登陆完成之后,生成字符串包括,用户信息(比如用户名)

在每个请求操作,如果登录判断,在请求头中,查看是否包含对应的token 字符串,如果包含,对字符串进行校验,对比判断是否是登陆时生成的对应的token 字符串。可以给token 设置过期时间

1、 公共部分

主要是该JWT的相关配置参数,比如签名的加密算法、格式类型、过期时间等等。

Key=ATGUIGU

2、 私有部分

用户自定义的内容,根据实际需要真正要封装的信息。

userInfo{用户的Id,用户的昵称nickName}

3、 签名部分

SaltiP: 当前服务器的Ip地址!{linux 中配置代理服务器的ip}

主要用户对JWT生成字符串的时候,进行加密{盐值}

最终组成 key+salt+userInfo è token!

base64编码,并不是加密,只是把明文信息变成了不可见的字符串。但是其实只要用一些工具就可以1把base64编码解成明文,所以不要在JWT中放入涉及私密的信息。


1: 首先引入依赖:
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt</artifactId>
</dependency>
2:JwtHelper类
    public class JwtHelper {
    private static long tokenExpiration = 24*60*60*1000;
    private static String tokenSignKey = "123456";
    public static String createToken(Long userId, String userName) {
        String token = Jwts.builder()
                .setSubject("YYGH-USER")
                .setExpiration(new Date(System.currentTimeMillis() + tokenExpiration))
                .claim("userId", userId)
                .claim("userName", userName)
                .signWith(SignatureAlgorithm.HS512, tokenSignKey)
                .compressWith(CompressionCodecs.GZIP)
                .compact();
        return token;
    }
    public static Long getUserId(String token) {
        if(StringUtils.isEmpty(token)) return null;
        Jws<Claims> claimsJws = Jwts.parser().setSigningKey(tokenSignKey).parseClaimsJws(token);
        Claims claims = claimsJws.getBody();
        Integer userId = (Integer)claims.get("userId");
        return userId.longValue();
    }
    public static String getUserName(String token) {
        if(StringUtils.isEmpty(token)) return "";
        Jws<Claims> claimsJws 
= Jwts.parser().setSigningKey(tokenSignKey).parseClaimsJws(token);
        Claims claims = claimsJws.getBody();
        return (String)claims.get("userName");
    }
    public static void main(String[] args) {
        String token = JwtHelper.createToken(1L, "55");
        System.out.println(token);
        System.out.println(JwtHelper.getUserId(token));
        System.out.println(JwtHelper.getUserName(token));
    }
}
目录
相关文章
|
7月前
|
存储 安全 API
Cookie,Session和Token
Cookie,Session和Token
|
Web App开发 安全 iOS开发
dd-ztna-token 是一个安全令牌
dd-ztna-token 是一个安全令牌
108 2
|
6月前
|
人工智能 自然语言处理 区块链
什么是token?3分钟带你看懂
`Token`在人工智能领域指的是文本处理的最小单元,用于大语言模型如LLM,它可以是单词、字母等。在模型运作中,输入的文本被转化为tokens,模型通过分析上下文tokens预测并生成输出。模型的上下文(窗口)长度限制了处理的token数量,影响性能和用户体验。此外,`token`也与收费计量单位相关,大模型服务商常按token量计费。同时,`AI token`在某些场景下代表代币,用于应用程序交易、服务和投资,有时扮演加密货币角色。Token在人机交流中起到桥梁作用,促进了通用人工智能的普及和发展。
|
7月前
|
C语言
C的令牌(Token)
C的令牌(Token)。
44 0
|
存储 安全 前端开发
token详解
token详解
3300 0
|
缓存 前端开发 算法
深入理解token
Token 是在服务端产生的。如果前端使用用户名/密码向服务端请求认证,服务端认证成功,那么在服务端会返回 Token 给前端。前端可以在每次请求的时候带上 Token 证明自己的合法地位
696 0
|
JSON 安全 Java
Jwt和Token
Jwt和Token的认识
1495 0
Jwt和Token
|
前端开发 算法 网络安全
深入理解Token
深入理解Token
1132 0
深入理解Token
|
算法 中间件
koa如何进行token设置和进行token过期验证
两个参数分别是签名算法和自定义的签名Key(盐)。签名key可以byte[] 、String及Key的形式传入。前两种形式均存入builder的keyBytes属性,后一种形式存入builder的key属性。如果是第二种(及String类型)的key,则将其进行base64解码获得byte[] 。
无token实现登录拦截
无token实现登录拦截
无token实现登录拦截