Token和session的都是用于身份的验证,而session需要存储空间,Token并不需要,这次使用的主要是Token。
首先Token作为一个字符串,获取到验证信息后,会进行一个加密。
获取Token:
@Autowired
TokenService tokenService;
String token = tokenService.getToken(dbUser.getUsername(), dbUser.getPassword());
在服务层实现Token方法进行信息保存:
public String getToken(String name, String password) {
String token="";
token= JWT.create()
.withClaim("username", name)
.withClaim("generatetime",System.currentTimeMillis())
.withClaim("exptime",1000*1*60*60)
.sign(Algorithm.HMAC256(password));// 以 password 作为 token 的密钥
return token;
}
这里将name赋值给username,存到token:
.withClaim("username", name)
对密码进行加密:
.sign(Algorithm.HMAC256(password));// 以 password 作为 token 的密钥
Token是无状态的,不论是出于安全还是使用都有必要设置时间。
设置一个小时过期:
.withClaim("generatetime",System.currentTimeMillis())
.withClaim("exptime",1000*1*60*60)
取到用户信息后,需要进行校验:
username = JWT.decode(token).getClaim("username").asString();
获取到Token后封装为Json数据返回给前台:
jsonObject.put("token", token);
jsonObject.put("username",dbUser.getUsername());
jsonObject.put("enpid", dbUser.getEnpid());
jsonObject.put("roleid", dbUser.getRoleid());
jsonObject.put("enpname", dbUser.getEnpname());
至此,Token的创建存数据已经完成。然后是对携带Token的判断,下一篇文章将介绍
2018/12/21
guanglu