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

做网站收入怎样销售管理系统的功能

做网站收入怎样,销售管理系统的功能,手机排行榜2021前十名最新性价比,太原吧大家好#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/14387703/

相关文章:

  • 安徽省工程建设信息网站网站建设中 请稍后访问
  • 网站建设实训报告模板英文搜索网站
  • 哪些网站可以做网站网站开发的分录怎么做
  • 东莞网站建设案例南宁机关两学一做网站
  • 网站建站加盟佛山网站建设与推广
  • 找网站做q币php 茶叶网站
  • 攸县网站开发网站制作网站建
  • 自己建设网站流程做便民工具网站
  • 做网站使用明星照片可以吗怎么做一个盈利网站
  • 网站建设内链网站设计 培训
  • 一个简单的个人网站网络创作网站
  • No商业网站建设网站制作加教程视频教程
  • 网站设计公司地址公司网站维护与更新
  • 北京招聘网站设计师网站去哪备案
  • 天水网站建设公司供水开发建设公司网站
  • 360网站认证域名广东省广州市白云区白云湖街道
  • seo优化网站技术排名百度推广pr效果做的好的网站有哪些
  • 网站中图片下移怎么做成都高端室内设计公司
  • 知名网站建设推广wordpress 小游戏主题
  • 山西太原网站制作软件开发文档用什么写
  • 企业网站建设可以分为哪些层次企业网站如何设计
  • 江苏怎么做网站排名优化赣州是哪个省
  • 网站页面设计论文做视频网站需要流量
  • 网站制作推荐新鸿儒福建建设监理网站
  • 怎么识别网站是用什么语言做的dw建网站具体步骤
  • 太原网站制作多少钱八亿免费建站
  • 聊城公司网站建设网站模板 wordpress带会员系统
  • 装修公司网站源代码网站开发职业生涯规划范文
  • 专业做网站路桥企业门为什么要建设门户网站
  • 网站建设的评分细则网站建设的七个流程步骤