黑龙江建设厅网站 孙宇,自己的网站怎么做排名,网店代运营哪家公司好,网站建设公司推广方案一、redis优化登录接口。 原有代码中在修改密码在产生新令牌后并未将旧的令牌主动失效#xff0c;旧的令牌依然可以使用 #xff0c;会产生安全隐患#xff0c;所以需要对其进行优化。
1.令牌主动失效机制。 #xff08;1#xff09;登录成功后#xff0c;给浏览器响应令…一、redis优化登录接口。 原有代码中在修改密码在产生新令牌后并未将旧的令牌主动失效旧的令牌依然可以使用 会产生安全隐患所以需要对其进行优化。
1.令牌主动失效机制。 1登录成功后给浏览器响应令牌的同时把该令牌存储到redis中 2Loginnterceptor拦截器中需要验证浏览器携带的令牌并同时需要获取到redis中存储的与之相同的令牌 3当用户修改密码成功后删除redis中存储的旧令牌。
2.SpringBoot集成redis。 1导入spring-boot-starter-data-redis起步依赖 2在yml配置文件中,配置redis连接信息 3调用API(StringRedisTemplate)完成字符串的存取操作。
3.令牌主动失效。 修改UserController.java中的登录接口以及修改密码接口。 //判断密码是否正确 loginUser对象中的password为密文if(Md5Util.getMD5String(password).equals(loginUser.getPassword())){//登录成功MapString,Object claims new HashMap();claims.put(id,loginUser.getId());claims.put(username,loginUser.getUsername());String token JwtUtil.genToken(claims);//把token存储到redis中ValueOperationsString, String operations stringRedisTemplate.opsForValue();operations.set(token,token,1, TimeUnit.HOURS);return Result.success(token);} //调用Service完成密码更新userService.updatePwd(newPwd);//删除redis中对应的TokenValueOperationsString, String operations stringRedisTemplate.opsForValue();operations.getOperations().delete(token);return Result.success(); 修改拦截器LoginInterceptor.java Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//令牌验证String token request.getHeader(Authorization);try{//从redis中获取相同的tokenValueOperationsString, String operations stringRedisTemplate.opsForValue();String redisToken operations.get(token);if(redisToken null){//token已经失效throw new RuntimeException();}MapString, Object claims JwtUtil.parseToken(token);//把业务数据存储到ThreadLocal中ThreadLocalUtil.set(claims);//放行return true;}catch (Exception e){//http响应状态码为401response.setStatus(401);//不放行return false;}} 运行测试发现已经修复原有缺陷。