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

无锡设计网站建设长沙专业网络推广公司

无锡设计网站建设,长沙专业网络推广公司,网站建设与发布,wordpress 引用 插件1.流程图 单机节点下的登录状态校验 分布式节点下的登录状态校验 2.代码实现 实现步骤分为如下几步 实现WebMvcConfigurer接口,添加拦截器定义拦截器,需要配置两个interceptor,第一个用于刷新token,写threadlocal&#xff…

1.流程图

单机节点下的登录状态校验
在这里插入图片描述

分布式节点下的登录状态校验
在这里插入图片描述

2.代码实现

实现步骤分为如下几步

  1. 实现WebMvcConfigurer接口,添加拦截器
  2. 定义拦截器,需要配置两个interceptor,第一个用于刷新token,写threadlocal,第二个用于判断threadlocal中是否有用户的登录信息

q1:为什么这里要定义两个interceptor?把刷新token的逻辑放到LoginInterceptor里边实现
a1:原因是LoginInterceptor配置了页面路径排除,LoginInterceptor只对需要登录的页面做校验,对于不需要登录的是直接放行,不会执行preHandle方法,如果刷新token放在LoginInterceptor,则会出现用户在不需要登录的页面操作,过了一段时间仍会提醒用户没有登录的现象

a.实现WebMvcConfigurer接口,配置拦截器

package com.hmdp.config;import com.hmdp.utils.LoginInterceptor;
import com.hmdp.utils.RefreshTokenInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;import javax.annotation.Resource;@Configuration
public class MvcConfig implements WebMvcConfigurer {@Resourceprivate StringRedisTemplate stringRedisTemplate;@Overridepublic void addInterceptors(InterceptorRegistry registry) {// 登录拦截器registry.addInterceptor(new LoginInterceptor()).excludePathPatterns("/shop/**","/voucher/**","/shop-type/**","/upload/**","/blog/hot","/user/code","/user/login").order(1);// token刷新的拦截器registry.addInterceptor(new RefreshTokenInterceptor(stringRedisTemplate)).addPathPatterns("/**").order(0);}
}

b.定义拦截器interceptor

需要配置两个interceptor,第一个用于刷新token,写threadlocal,第二个用于判断threadlocal中是否有用户的登录信息

第一个用于从redis中取出用户的登录信息,并将登录信息维护到threadlocal中

package com.hmdp.utils;import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import com.hmdp.dto.UserDTO;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
import java.util.concurrent.TimeUnit;import static com.hmdp.utils.RedisConstants.LOGIN_USER_KEY;
import static com.hmdp.utils.RedisConstants.LOGIN_USER_TTL;public class RefreshTokenInterceptor implements HandlerInterceptor {private StringRedisTemplate stringRedisTemplate;public RefreshTokenInterceptor(StringRedisTemplate stringRedisTemplate) {this.stringRedisTemplate = stringRedisTemplate;}@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 1.获取请求头中的tokenString token = request.getHeader("authorization");if (StrUtil.isBlank(token)) {return true;}// 2.基于TOKEN获取redis中的用户String key  = LOGIN_USER_KEY + token;Map<Object, Object> userMap = stringRedisTemplate.opsForHash().entries(key);// 3.判断用户是否存在if (userMap.isEmpty()) {return true;}// 5.将查询到的hash数据转为UserDTOUserDTO userDTO = BeanUtil.fillBeanWithMap(userMap, new UserDTO(), false);// 6.存在,保存用户信息到 ThreadLocalUserHolder.saveUser(userDTO);// 7.刷新token有效期stringRedisTemplate.expire(key, LOGIN_USER_TTL, TimeUnit.MINUTES);// 8.放行return true;}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {// 移除用户UserHolder.removeUser();}
}

第二个从threadlocal中读用户信息,判断用户是否登录


import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class LoginInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 1.判断是否需要拦截(ThreadLocal中是否有用户)if (UserHolder.getUser() == null) {// 没有,需要拦截,设置状态码response.setStatus(401);// 拦截return false;}// 有用户,则放行return true;}
}
http://www.hrbkazy.com/news/16722.html

相关文章:

  • 大连建网站电话seo关键词优化系统
  • 重庆建设工程安全管理协会网站软文怎么写吸引人
  • 百度的网址网站搜索引擎优化的方法
  • 长沙市网站制作哪家专业外贸网站建设优化推广
  • 网站被收录要怎么做武汉网站关键词推广
  • 宝塔怎么做两个网站收录提交入口
  • wordpress 2m广州seo顾问seocnm
  • 360广告联盟怎么做网站店铺推广平台有哪些
  • 机票网站建设网络免费推广平台
  • 阿里巴巴做网站费用计入武汉谷歌seo
  • 无锡企业网站排名优化流量精灵网页版
  • 网站平台建设实训总结百度关键词推广条件
  • windows 网站模板seo建站公司
  • 做家政下载什么网站或什么群呢百度知道官网手机版
  • 网站建设及编辑岗位职责海外网站推广优化专员
  • 网站改版换了域名seo 资料包怎么获得
  • 微信网站建设多少钱南京谷歌优化
  • 品质好房李飞seo
  • 深圳网站制作的公司嘉兴seo优化效果怎么样
  • 公司有网站域名 如何做网站培训班招生方案有哪些
  • 网站开发获客渠道百姓网推广电话
  • 应用商店网站模板必应站长平台
  • 江西省上饶市建设局网站怀来网站seo
  • 北京高端网站建设咸阳全网推广方案
  • php开源公司网站长沙seo网站优化公司
  • 做淘宝图的素材搜索网站自己怎么做一个网页
  • java高端网站建设福州整站优化
  • 磁力网站怎么做今日全国最新疫情通报
  • python网站搭建广州网站优化系统
  • 昆明市建设厅网站国家新闻最新消息今天