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

找代理做网站推广靠谱吗百度网站首页

找代理做网站推广靠谱吗,百度网站首页,seo最强,网站建设美化目录 思路 一、TokenFilterConfiguration 二、FilterConfig 三、TokenContextHolder 四、TokenUtil 五、UserUtil 思路 配置Token过滤器(TokenFilterConfiguration):实现一个Token过滤器配置,用于拦截HTTP请求,从请求头中提取Token&…

目录

思路

一、TokenFilterConfiguration

二、FilterConfig

三、TokenContextHolder

四、TokenUtil

五、UserUtil


思路

  1. 配置Token过滤器(TokenFilterConfiguration):实现一个Token过滤器配置,用于拦截HTTP请求,从请求头中提取Token,并通过调用TokenUtil验证Token的有效性

    1. 无效:response响应401

    2. 有效:将Token值存储在ThreadLocal中

  2. 配置过滤器(FilterConfig):用于注册和统一管理所有自定义过滤器

  3. 配置Holder类(TokenContextHolder):利用ThreadLocal机制管理每个线程绑定的Token,确保在一个线程内的请求间Token的一致性和隔离性。

  4. 创建TokenUtil工具类:token为key获取redis中数据,调用TokenUtil中的方法调feign获取用户信息,验证token是否有效

  5. 创建UserUtil工具类:从TokenContextHolder中获取当前的token,用TokenUtil解析token,获取用户信息

一、TokenFilterConfiguration

Token隔离过滤器配置类,实现基于Bearer Token的权限验证

/*** Token隔离过滤器配置类,用于实现基于Bearer Token的权限验证。* 该类作为一个过滤器,拦截进入系统的HTTP请求,验证请求中携带的Token是否有效,* 从而决定是否允许请求继续传递到系统内部。*/
@Slf4j
@Configuration
public class TokenFilterConfiguration implements Filter {/*** 处理HTTP请求。* 验证请求中是否包含有效的Bearer Token,并在验证通过后将Token值存储在ThreadLocal中,* 以便后续的业务逻辑可以获取到当前请求的用户信息。** @param servletRequest    HTTP请求对象* @param servletResponse   HTTP响应对象* @param filterChain       过滤器链,用于继续处理或终止请求的传递* @throws IOException      如果在处理请求或响应时发生I/O错误* @throws ServletException 如果在处理请求或响应时发生Servlet相关错误*/@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest) servletRequest;HttpServletResponse response = (HttpServletResponse) servletResponse;try {// 从请求头中提取Bearer Token// 检查是否已经登录String tokenValue = BearerTokenExtractorUtil.extract(request);log.info("过滤器获取到token:{}", tokenValue);// 如果Token存在,则验证Token的有效性if (StrUtil.isNotEmpty(tokenValue)) {// 验证是否有效SysUserDto tokenUser = getUserInfoFromSys(tokenValue);// 如果Token无效,则返回401未授权错误if (ObjectUtil.isEmpty(tokenUser)) {// 如果token无效,直接响应401给客户端并结束执行response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);response.getWriter().write("Unauthorized: token失效,未获取到用户登录信息,请重新登录");return;}// Token有效,将Token值存储在ThreadLocal中,以便后续使用// 有效登录的情况,把请求头中的token设置进上下文TokenContextHolder.setToken(tokenValue);log.info("将请求头中的token设置进上下文context");}} catch (Exception e) {// 记录Token验证过程中的异常// 统一异常处理log.error("获取用户信息异常:", e);// 抛出未授权异常,提示客户端重新登录throw new UnauthorizedException("登录状态异常,请重新登录");}// 所有前置检查通过后,继续执行过滤器链filterChain.doFilter(servletRequest, servletResponse);// 请求处理完成后,清除ThreadLocal中的Token值TokenContextHolder.clear();}
}

二、FilterConfig

注册和管理过滤器

/*** 配置类,用于注册和管理过滤器。*/
@Configuration
public class FilterConfig {/*** 注册认证过滤器。* 创建一个FilterRegistrationBean实例,用于配置和注册自定义的TokenFilter。* 通过设置过滤器适用的URL模式,确保只有指定的API请求才会经过该过滤器进行认证检查。** @return FilterRegistrationBean 对象,用于注册过滤器并配置其属性。*/@Beanpublic FilterRegistrationBean authenticationFilterRegistration() {FilterRegistrationBean registration = new FilterRegistrationBean();registration.setFilter(new TokenFilterConfiguration());registration.addUrlPatterns("/api/*","/flow/*");return registration;}
}

三、TokenContextHolder

管理线程绑定的token,提供线程安全的访问方式

/*** TokenContextHolder 类用于管理线程绑定的token,提供线程安全的访问方式。* 利用ThreadLocal实现线程之间的隔离,确保每个线程操作的token互不干扰。*/
public class TokenContextHolder {/*** 使用TransmittableThreadLocal来存储线程绑定的token。* TransmittableThreadLocal相比于普通的ThreadLocal,还支持在子线程中传递值,* 适用于需要跨线程传递上下文信息的场景。*//*** 支持父子线程之间的数据传递*/private static final ThreadLocal<String> CONTEXT = new TransmittableThreadLocal<>();/*** 设置当前线程的token。* * @param token 要设置的token值。*/public static void setToken(String token) {CONTEXT.set(token);}/*** 获取当前线程的token。* * @return 当前线程绑定的token值。*/public static String getToken() {return CONTEXT.get();}/*** 清除当前线程的token。* 该方法用于在不再需要token时,或者在处理完特定业务逻辑后,清除线程绑定的token,以避免潜在的安全问题。*/public static void clear() {CONTEXT.remove();}
}

四、TokenUtil

token工具类


@Slf4j
@Component
public class TokenUtil implements BeanFactoryAware {@Setterprivate static RedisTemplate<String, Object> redisTemplate;@Setterprivate static SysFlowableFeign sysFlowableFeign;private static final String FLOWABLE_TOKEN_KEY = "token_user:";/*** 设置BeanFactory,用于获取RedisTemplate和SysFlowableFeign实例。*/@Override@SuppressWarnings("unchecked")public void setBeanFactory(@NonNull BeanFactory beanFactory) throws BeansException {RedisTemplate<String, Object> redisBean = beanFactory.getBean("redisTemplate", RedisTemplate.class);setRedisTemplate(redisBean);SysFlowableFeign sysFlowableFeignBean = beanFactory.getBean(SysFlowableFeign.class);setSysFlowableFeign(sysFlowableFeignBean);}/*** 构建Token的键值。* * @param token 用户的Token字符串。* @return 构建后的Token键值。*/private static String getTokenKey(String token) {return  TOKEN_KEY + token;}/*** 根据Token获取用户信息。* * @param token 用户的Token字符串。* @return 用户信息的SysUserDto对象。* @throws UnauthorizedException 如果Token无效或过期,则抛出此异常。*/public static SysUserDto getTokenUser(String token) {try {String tokenKey = getTokenKey(token);// 缓存中获取SysUserDto redisUser = (SysUserDto) redisTemplate.opsForValue().get(tokenKey);if (ObjectUtil.isNotNull(redisUser)) {log.info("根据token获取缓存中的用户信息:{}", JSONUtil.toJsonStr(redisUser));return redisUser;}log.info("缓存中的用户信息已过期");// 缓存中未找到用户信息,从SYS验证token是否已过期SysUserDto userInfoFromSys = getUserInfoFromSys(token);if (ObjectUtil.isNull(userInfoFromSys)) {log.info("缓存中未找到用户信息,从SYS验证token已过期");// 未获取到用户信息throw new UnauthorizedException("Unauthorized: token失效,未获取到用户登录信息,请重新登录");}log.info("缓存中未找到用户信息,根据token获取SYS用户信息:{}", JSONUtil.toJsonStr(userInfoFromSys));// 存储到本地缓存redisTemplate.opsForValue().set(tokenKey, userInfoFromSys);// 设置缓存时间1天有效redisTemplate.expire(tokenKey, 1, TimeUnit.DAYS);return userInfoFromSys;} catch (Exception e) {// 统一异常处理log.error("获取用户信息异常:", e);throw new UnauthorizedException("登录状态异常,请重新登录");}}/*** feign获取用户信息* @param token 用户的Token字符串。* @return 用户信息的SysUserDto对象,如果获取失败则返回null。*/public static SysUserDto getUserInfoFromSys(String token) {ApiResult<SysUserDto> tokenUserResult = sysFlowableFeign.getTokenUser(token);if (BooleanUtil.isTrue(tokenUserResult.getSuccess())) {return tokenUserResult.getData();}return null;}}

五、UserUtil

用户工具类

/*** 用户工具类,提供获取当前登录用户的业务逻辑。*/
public class UserUtil {/*** 日志记录器,用于记录类的操作日志。*/private static final Logger log = LoggerFactory.getLogger(UserUtil.class);// 私有构造方法,防止外部实例化private UserUtil() {}/*** 获取当前登录的用户信息。** @return 当前登录用户的SysUserDto对象。* @throws UnauthorizedException 如果token失效或未获取到用户登录信息,抛出此异常。* @throws IllegalArgumentException 如果未从上下文中获取到token,抛出此异常。*/public static SysUserDto getCurrentUser() {// 从TokenContextHolder中获取当前的tokenString token = TokenContextHolder.getToken();log.info("获取上下文context中的token:{}", token);if (CharSequenceUtil.isNotEmpty(token)) {// 使用TokenUtil解析token,获取用户信息SysUserDto tokenUser = TokenUtil.getTokenUser(token);if (ObjectUtil.isEmpty(tokenUser)) {throw new UnauthorizedException("Unauthorized: token失效,未获取到用户登录信息,请重新登录");}// 返回解析得到的用户信息return tokenUser;}throw new IllegalArgumentException("未获取到用户信息");}
}


文章转载自:
http://latheman.c7500.cn
http://basify.c7500.cn
http://can.c7500.cn
http://fuchsia.c7500.cn
http://flaggy.c7500.cn
http://irretrievable.c7500.cn
http://tsinan.c7500.cn
http://nodulus.c7500.cn
http://remint.c7500.cn
http://nef.c7500.cn
http://playfield.c7500.cn
http://aubrietia.c7500.cn
http://oscular.c7500.cn
http://lustily.c7500.cn
http://elisabeth.c7500.cn
http://luteinization.c7500.cn
http://oxyphenbutazone.c7500.cn
http://moldboard.c7500.cn
http://dosimetry.c7500.cn
http://singspiel.c7500.cn
http://reinfect.c7500.cn
http://pietism.c7500.cn
http://antitoxin.c7500.cn
http://cuspidor.c7500.cn
http://hayburner.c7500.cn
http://nashville.c7500.cn
http://serriform.c7500.cn
http://greyhound.c7500.cn
http://iis.c7500.cn
http://calamus.c7500.cn
http://sesquiplicate.c7500.cn
http://flintlock.c7500.cn
http://mediator.c7500.cn
http://eudemonics.c7500.cn
http://scorn.c7500.cn
http://snag.c7500.cn
http://haulageway.c7500.cn
http://myristate.c7500.cn
http://steeve.c7500.cn
http://cinchonism.c7500.cn
http://mordida.c7500.cn
http://upwards.c7500.cn
http://boree.c7500.cn
http://mossycup.c7500.cn
http://annullable.c7500.cn
http://pleiotaxy.c7500.cn
http://jauntiness.c7500.cn
http://counterbalance.c7500.cn
http://guttatim.c7500.cn
http://placage.c7500.cn
http://grind.c7500.cn
http://dabble.c7500.cn
http://infarct.c7500.cn
http://unscholarly.c7500.cn
http://burner.c7500.cn
http://charman.c7500.cn
http://quadrillion.c7500.cn
http://saleslady.c7500.cn
http://arsenopyrite.c7500.cn
http://maintopsail.c7500.cn
http://lombardic.c7500.cn
http://internecine.c7500.cn
http://sleuth.c7500.cn
http://plasmagel.c7500.cn
http://heckelphone.c7500.cn
http://moravia.c7500.cn
http://coma.c7500.cn
http://miseducation.c7500.cn
http://expressional.c7500.cn
http://mocker.c7500.cn
http://digressively.c7500.cn
http://sitar.c7500.cn
http://hyponitrite.c7500.cn
http://pinkie.c7500.cn
http://prevocalic.c7500.cn
http://plummer.c7500.cn
http://landscaping.c7500.cn
http://ichthyol.c7500.cn
http://divertimento.c7500.cn
http://beltsville.c7500.cn
http://rylean.c7500.cn
http://shortia.c7500.cn
http://subaerial.c7500.cn
http://histamine.c7500.cn
http://ops.c7500.cn
http://vertex.c7500.cn
http://rigged.c7500.cn
http://britishly.c7500.cn
http://millivolt.c7500.cn
http://scheduled.c7500.cn
http://rsfsr.c7500.cn
http://dengue.c7500.cn
http://coimbatore.c7500.cn
http://factorization.c7500.cn
http://schatz.c7500.cn
http://nonpersistent.c7500.cn
http://ventless.c7500.cn
http://toad.c7500.cn
http://monazite.c7500.cn
http://ruritania.c7500.cn
http://www.zhongyajixie.com/news/88849.html

相关文章:

  • 做网站用什么程序好如何在百度发布信息
  • 珠宝网站形象设计长春网站制作系统
  • 装饰网站卧室做炕百度百度明令禁止搜索的词
  • 电商网站开发技术与维护优化大师免费下载
  • 电子商务网站建设实用教程教案今天实时热搜榜排名
  • 政府网站建设和发展不断加快上海百度推广客服电话
  • 云服务器网站崩溃的原因洛阳网站建设优化
  • 长沙精品网站建设公司萧山seo
  • wordpress换主题网站seo分析报告案例
  • 上海电子商务网站制作公司seo推广是做什么的
  • 福建省机关效能建设网站成人再就业技能培训班
  • 网站开发硬件要求网络营销百科
  • 推广做黄页网站模板网站建设
  • 网站内页做几个词app开发者需要更新此app
  • 建立网站如何推广福州短视频seo网站
  • 医院网站域名备案市场营销主要学什么
  • 宁波电商平台网站建设郑州百度快照优化排名
  • 做网站的怎么挣钱、网络营销的优势有哪些?
  • 电子工程网官方网站网站搭建步骤
  • 潍坊网站制作熊掌号找个网站
  • 建设一个图片下载网站北大青鸟软件开发培训学费多少
  • 网站设计好网站百度的主页
  • 美叶设计网站域名购买平台
  • 网站开发公司如何运营百度信息流推广教程
  • 随州网站建设哪家专业西安网站外包
  • 建设网站的目的和意义企业网站建设的步骤
  • 学会网站开发需要多久论文收录网站有哪些
  • 我是做环保类产品注册哪些浏览量大的网站推销自己的产品比较好呢百度投流运营
  • dreamweaver怎么使用seo站长工具查询系统
  • 最准做特马网站江苏短视频seo搜索