当前位置: 首页 > news >正文

制作图片的免费网站用cms建设网站课程宅门

制作图片的免费网站,用cms建设网站课程宅门,网站研发公司,微信怎么做自己的网站大家好#xff0c;今天我又又又来了#xff0c;hhhhh。 上文中 我们永redis缓存了token 但是我们发现了 一个bug #xff0c;redis中缓存的token 是单用户才能实现的。 就是 我 redis中存储的键 名 为token 值 是jwt令牌 #xff0c;但是如果 用户a 登录 之后 创建一个…大家好今天我又又又来了hhhhh。 上文中 我们永redis缓存了token 但是我们发现了 一个bug redis中缓存的token  是单用户才能实现的。 就是 我 redis中存储的键 名 为token   值 是jwt令牌 但是如果 用户a 登录 之后 创建一个 键 为token的 键值对如果用户b登录创建的的键名也是 token 这样用户b的 jwt 会覆盖 用户a的就会导致 用户a 的token 会失效呀这真是一个大大的bug 按照我目前的水平我想到了一下 的解决方案 既然 token 的键会覆盖那么我们给 token的键 加上一个唯一标识不就好了   解决前的代码 package com.example.getway.globalfilter;import cn.hutool.core.collection.CollUtil; import com.example.getway.Untils.JwtUntils; import com.example.getway.commen.MessageConstant; import com.example.getway.pojo.JwtProperties; import io.jsonwebtoken.Claims; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.gateway.filter.GatewayFilterChain; import org.springframework.cloud.gateway.filter.GlobalFilter; import org.springframework.core.Ordered; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.http.server.RequestPath; import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.http.server.reactive.ServerHttpResponse; import org.springframework.stereotype.Component; import org.springframework.web.server.ServerWebExchange; import reactor.core.publisher.Mono;import javax.annotation.Resource; import java.util.List; import java.util.concurrent.TimeUnit; RequiredArgsConstructor Slf4j Component public class TokenGlobalFilter implements GlobalFilter, Ordered {private final JwtProperties jwtProperties;private final RedisTemplate redisTemplate;// 这个过滤器 请求的转发Overridepublic MonoVoid filter(ServerWebExchange exchange, GatewayFilterChain chain) {//我们只要是非登录请求全都要检验jwt 然后进行 用户信息的传递//获取request对象ServerHttpRequest request exchange.getRequest();RequestPath requestPath request.getPath();if(requestPath.toString().contains(/userLogin)){return chain.filter(exchange);}//获取请求头的 token // String redisToken null; // ListString authorization request.getHeaders().get(authorization); // if (!CollUtil.isEmpty(authorization)) { // redisToken authorization.get(0); // }String redisToken (String)redisTemplate.opsForValue().get(MessageConstant.TOKEN);log.info(token:{},redisToken);if (redisToken ! null ) {//进行jwt的解析try {Claims claims JwtUntils.parseJwt(redisToken, jwtProperties.getSecretkey());//每次 访问其他资源的时候 都把token更新redisTemplate.expire(MessageConstant.TOKEN, 1000, TimeUnit.DAYS);String loginId claims.get(MessageConstant.LOGIN_ID).toString();log.info(网关层当前用户的id:{}, Long.valueOf(loginId));//证明 token有效 传递用户信息ServerWebExchange loginId1 exchange.mutate().request(b - b.header(loginId, loginId)).build();return chain.filter(loginId1);} catch (Exception e) {log.info({},e.getMessage());//出现异常返回一个异常响应ServerHttpResponse response exchange.getResponse();response.setRawStatusCode(401);return response.setComplete();}}log.info(token错误);return exchange.getResponse().setComplete();} //过滤器链中的优先级 数值越低 优先级就越高Overridepublic int getOrder() {return 0;} }解决前的登陆代码 package com.example.logindemo.cotroller;import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.example.logindemo.Untils.JwtUntils; import com.example.logindemo.commen.MessageConstant; import com.example.logindemo.pojo.JwtProperties; import com.example.logindemo.pojo.po.UserLogin; import com.example.logindemo.result.Result; import com.example.logindemo.service.UserLoginService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.annotations.Param; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.util.DigestUtils; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;import java.time.Duration; import java.util.HashMap; import java.util.Map; import java.util.concurrent.TimeUnit;RestController Slf4j RequiredArgsConstructor public class LoginController {private final UserLoginService userLoginService;private final JwtProperties jwtProperties;private final RedisTemplate redisTemplate;PostMapping(/userLogin)public Result userLogin( String username, String password) {passwordDigestUtils.md5DigestAsHex(password.getBytes());LambdaQueryWrapperUserLogin userLoginLambdaQueryWrapper new LambdaQueryWrapperUserLogin().eq(UserLogin::getUsername, username);UserLogin userLogin userLoginService.getOne(userLoginLambdaQueryWrapper);if(userLoginnull userLogin.getUsername().isEmpty()){return Result.error(查询不到用户);}if (username.equals(userLogin.getUsername()) password.equals(userLogin.getPassword())) {//需要一个map集合 传什么 解析出来什么 一般传的是登录用户的id 我们传1HashMapString, Object map new HashMap();map.put(MessageConstant.LOGIN_ID, userLogin.getId());String token JwtUntils.CreateJwt(map, jwtProperties.getSecretkey());//设置redis缓存为1000天redisTemplate.opsForValue().set(MessageConstant.TOKEN,token,1000,TimeUnit.DAYS);return Result.success(token);}return Result.error(未知错误);}} 解决后 的登录代码  这里只放修改部分 解决后的 网关层过滤代码 现在 我们手动在数据库添加 一个用户   我们apifox进行登录接口的依次登录 然后观察 redis中的缓存数据 发现token 2 存在  我们也就设置成功了
http://www.hkea.cn/news/14474722/

相关文章:

  • 东莞市公司网站建设平台seo课
  • 域名信息备案管理系统查询seo 网站结构优化
  • 东莞网站代理平台推荐
  • 哪些属于网站评论建设部特种作业证网站查询
  • seo站长网网站建设的功能需求文档
  • 网站建设与管理好找工作吗网络架构oss
  • 有公司可以做网站升级ipv6拼多多流量推广神器
  • 嘉兴简单建站seo外链工具软件
  • 南京网络建站模板网站开发方法
  • 网站建设经典教材亚马逊雨林在地图上的位置
  • 如何自己建营销网站wordpress4.9.8中文版
  • 电商运营网站微信开放平台认证费用
  • 网站专栏建设情况公司做网站需要什么条件
  • 怎么查询网站的空间商加强图书馆网站建设
  • 如何借助织梦制作一个简单的网站北京有名的广告公司
  • 哪些网站可以做商家网站建设技术方案
  • 网站做301重定向的作用网站免费正能量不下载
  • 网站服务器租wordpress双语导航
  • 免费的网站生成app咪呜瀑布流WordPress模板
  • 做301重定向会影响网站权重吗济南工装定制公司
  • 个人不能建设论坛网站怎么办中国移动社区app下载
  • 网站程序 wap pc 同步广州网站定制开发设计
  • 移动网站优化买了域名之后怎么用
  • 海口网站开发邯郸怎样做网站
  • 做网站时背景音乐工程建筑模板价格
  • 做礼品的网站linux做网站哪个版本好
  • 网站搜索功能微信如何制作网页
  • 网站开发员工资wordpress攻击教程
  • 长春网站建设哪家公司好wordpress 送女友
  • 遵义酷虎网站开发有没有代做模型的网站