登录功能
这里使用JWT令牌技术进行登录功能的实现
JWT介绍
需要导入jjwt的依赖
先看接口
传入账号密码返回token
先导入一个JWT工具类
java">public class JWTUtils {private static final String jwtToken = "123456Mszlu!@###$$";public static String createToken(Long userId){Map<String,Object> claims = new HashMap<>();claims.put("userId",userId);JwtBuilder jwtBuilder = Jwts.builder().signWith(SignatureAlgorithm.HS256, jwtToken) // 签发算法,秘钥为jwtToken.setClaims(claims) // body数据,要唯一,自行设置.setIssuedAt(new Date()) // 设置签发时间.setExpiration(new Date(System.currentTimeMillis() + 24 * 60 * 60 * 60 * 1000));// 一天的有效时间String token = jwtBuilder.compact();return token;}public static Map<String, Object> checkToken(String token){try {Jwt parse = Jwts.parser().setSigningKey(jwtToken).parse(token);return (Map<String, Object>) parse.getBody();}catch (Exception e){e.printStackTrace();}return null;}}
登录功能实现
controller
Service
获取用户信息
我们返回token后他存储在浏览器的storage中
访问别的界面他就会通过这个token获取用户信息,然后我们实现就行
controller
service(这里直接用userservice,按理来说应该再写一个)
退出登录
没什么好讲的
就是删除redis中存储的token
注册
其实和登录差不多,把登录的查询逻辑改为insert逻辑即可,生成token加入到mysql和redis数据库,然后返回token
一个方法涉及了多个数据库操作,记得加事务
糊涂点
我们使用JWT工具类生成的只是字符串token
然后我们在redis里面存储的key是TOKEN_后面加上我们的token字符串
而我们的value是对应的sysuser对象的json字符串(这个字符串里面有我们从findUser查到的字段,如下)
这个会再loginService中实现将这个K-V写入Redis
然后返回这个token字符串给浏览器
然后当我们获取用户信息的时候
我们使用checkToken
有三步骤1.检验token是否为空2.检验token是否合法3.检验token在redis过期没
就出现了这段代码
而2的逻辑在哪个JWTutils实现了,直接调用,返回的K-V只有userid,但是我们不是根据这个查数据的,我们根据我们第三步
存储在redis中的数据进行数据查询到我们的sysUser对象