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

郑州网站建设哪家好技术培训机构排名前十

郑州网站建设哪家好,技术培训机构排名前十,学做包子馒头的网站,广州海珠网站开发方案目录 前言1. 项目结构和依赖配置1.1 项目依赖配置1.2 Redis连接配置 2. 令牌主动失效机制的实现流程2.1 登录成功后将令牌存储到Redis中2.2 使用拦截器验证令牌2.3 用户修改密码后删除旧令牌 3. Redis的配置与测试4. 可能的扩展与优化结语 前言 在现代Web系统中,用…

目录

  • 前言
  • 1. 项目结构和依赖配置
    • 1.1 项目依赖配置
    • 1.2 Redis连接配置
  • 2. 令牌主动失效机制的实现流程
    • 2.1 登录成功后将令牌存储到Redis中
    • 2.2 使用拦截器验证令牌
    • 2.3 用户修改密码后删除旧令牌
  • 3. Redis的配置与测试
  • 4. 可能的扩展与优化
  • 结语

前言

在现代Web系统中,用户认证是一个核心问题,尤其是在分布式系统和微服务架构中,如何高效、安全地管理用户登录状态显得尤为重要。通常,系统通过令牌(Token)来进行身份验证,令牌的生命周期控制对于安全性非常关键。当用户修改密码等敏感操作后,确保其之前的令牌失效,是一种常用的安全策略,可以有效防止凭证被盗后恶意访问的风险。本文将详细介绍基于Spring Boot和Redis实现令牌主动失效机制的设计与实现思路,帮助读者理解和应用该方案来提高系统的安全性和稳定性。

1. 项目结构和依赖配置

首先,我们需要基于Spring Boot搭建一个简单的Web项目,同时集成Redis作为缓存数据库,用于存储和管理用户令牌的状态信息。通过引入Redis,能够有效控制令牌的失效机制,从而实现对用户认证的动态管理。
在这里插入图片描述

1.1 项目依赖配置

在项目的pom.xml中添加如下依赖,用于集成Redis:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>

1.2 Redis连接配置

application.yml中配置Redis的连接信息:

spring:redis:host: localhostport: 6379timeout: 6000mslettuce:pool:max-active: 8max-idle: 2min-idle: 1max-wait: -1ms

该配置将连接本地的Redis实例,并定义了连接池的基本参数。具体参数根据项目需求可以进一步调整。

2. 令牌主动失效机制的实现流程

在这里插入图片描述

在实现令牌主动失效机制时,我们需要进行三步操作:

  1. 用户登录成功后,系统会生成一个Token并将其存储在Redis中。
  2. 在后续的每次请求中,通过拦截器从Redis中验证令牌的有效性。
  3. 当用户修改密码等操作成功后,系统主动删除Redis中的Token,使之前的令牌失效。

下面将逐步实现上述功能。

2.1 登录成功后将令牌存储到Redis中

首先,在用户登录成功的情况下,系统会生成一个Token。为了方便讲解,这里采用一个简单的UUID作为Token示例。生成的Token不仅返回给前端,也会同步存储到Redis中,并设置一定的有效时间(如1小时)。

示例代码如下:

@Autowired
private StringRedisTemplate stringRedisTemplate;public String login(String username, String password) {// 生成TokenString token = UUID.randomUUID().toString();// 将Token存储到Redis中,有效期1小时ValueOperations<String, String> operations = stringRedisTemplate.opsForValue();operations.set(token, token, 1, TimeUnit.HOURS);// 返回给用户的响应中包含Tokenreturn token;
}

上述代码通过StringRedisTemplateopsForValue方法,将Token以键值对的形式存储到Redis中。Redis缓存会定时清除过期数据,因此可以避免手动管理令牌的过期处理。

2.2 使用拦截器验证令牌

每次用户请求时,我们需要验证用户携带的Token是否有效。通过Spring的拦截器机制,可以在请求进入控制器之前检查Redis中的Token,判断其是否有效。若Token无效或已过期,则拒绝访问。

拦截器代码如下:

public class LoginInterceptor implements HandlerInterceptor {@Autowiredprivate StringRedisTemplate stringRedisTemplate;@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 从请求头中获取TokenString token = request.getHeader("Authorization");if (token == null || token.isEmpty()) {throw new RuntimeException("缺少令牌");}// 从Redis中查询TokenValueOperations<String, String> operations = stringRedisTemplate.opsForValue();String redisToken = operations.get(token);if (redisToken == null) {// Token不存在或已过期,抛出异常throw new RuntimeException("无效的令牌");}// Token有效,继续处理请求return true;}
}

LoginInterceptor中,我们通过StringRedisTemplateopsForValue方法获取Redis中的Token并与请求携带的Token对比。如果Token不存在,则直接拒绝该请求。若Token存在且有效,继续进行请求处理。

2.3 用户修改密码后删除旧令牌

当用户成功修改密码时,需要确保之前的Token立即失效。因此,成功修改密码后,我们需要从Redis中删除该用户的Token记录,防止旧Token被再次使用。

在修改密码的业务逻辑中,加入删除Token的代码:

public void changePassword(String username, String newPassword) {// 假设用户验证通过并修改了密码// 删除Redis中的旧TokenString token = getCurrentTokenForUser(username); // 从上下文或数据库中获取当前用户的TokenValueOperations<String, String> operations = stringRedisTemplate.opsForValue();operations.getOperations().delete(token);
}

在上述代码中,通过getOperations().delete()方法删除Token,使得旧Token立即失效。这样用户在修改密码后需要重新登录,保证了账户的安全性。

3. Redis的配置与测试

为了确保上述逻辑的正确性和Redis的稳定性,建议在开发阶段通过单元测试验证Redis的连接和数据操作。

@SpringBootTest
class RedisTest {@Autowiredprivate StringRedisTemplate stringRedisTemplate;@Testpublic void testSet() {ValueOperations<String, String> operations = stringRedisTemplate.opsForValue();operations.set("username", "zhangsan");operations.set("id", "1", 15, TimeUnit.SECONDS);// 检查存储的值String username = operations.get("username");System.out.println("用户名:" + username);}
}

以上代码将usernameid存储到Redis中,并设置了15秒的有效期。通过单元测试,可以直观地验证Redis的写入和有效期的功能是否正常工作。

4. 可能的扩展与优化

在实际应用中,可以进一步对该令牌失效机制进行扩展和优化:

  • 基于用户ID管理Token:可以在Redis中以userId为键,存储用户当前的Token,这样方便管理用户的多个Token(如多设备登录)。
  • 使用JWT(JSON Web Token):在Token中加入用户的相关信息(如用户ID、权限等),以减少对Redis的依赖。不过仍需在修改密码等场景下失效Token。
  • 动态调整Token有效期:可以根据用户的活跃度或敏感操作动态调整Token的过期时间,进一步提高系统的灵活性。

结语

本文详细介绍了基于Spring Boot和Redis实现令牌主动失效机制的完整流程,并提供了关键代码示例。通过将Token存储在Redis中并在必要时主动删除,确保了用户在修改密码等操作后的Token立即失效,从而有效增强了系统的安全性。这种方案在实际开发中具有良好的应用价值。通过适当扩展和优化,还可以满足更复杂的业务需求,为用户提供更优质的服务体验。


文章转载自:
http://epibenthos.jqLx.cn
http://plumbaginous.jqLx.cn
http://narration.jqLx.cn
http://hoggerel.jqLx.cn
http://groundwater.jqLx.cn
http://preservable.jqLx.cn
http://diosmose.jqLx.cn
http://panicle.jqLx.cn
http://exoplasm.jqLx.cn
http://nudist.jqLx.cn
http://atd.jqLx.cn
http://pollbook.jqLx.cn
http://otiose.jqLx.cn
http://avifauna.jqLx.cn
http://exarch.jqLx.cn
http://lanuginousness.jqLx.cn
http://netcropper.jqLx.cn
http://cohorts.jqLx.cn
http://ballistically.jqLx.cn
http://costermansville.jqLx.cn
http://idiocrasy.jqLx.cn
http://glutenous.jqLx.cn
http://handworked.jqLx.cn
http://poltroon.jqLx.cn
http://buddhahood.jqLx.cn
http://lattimore.jqLx.cn
http://biomechanics.jqLx.cn
http://caballine.jqLx.cn
http://unconstrained.jqLx.cn
http://batangas.jqLx.cn
http://resuscitator.jqLx.cn
http://lo.jqLx.cn
http://tuque.jqLx.cn
http://magneton.jqLx.cn
http://mesocephalon.jqLx.cn
http://noplace.jqLx.cn
http://hortensia.jqLx.cn
http://lurking.jqLx.cn
http://homework.jqLx.cn
http://sinoatrial.jqLx.cn
http://bradypepsia.jqLx.cn
http://zuidholland.jqLx.cn
http://inshore.jqLx.cn
http://clubber.jqLx.cn
http://fireballing.jqLx.cn
http://tuinal.jqLx.cn
http://coolth.jqLx.cn
http://abject.jqLx.cn
http://sassanian.jqLx.cn
http://apparent.jqLx.cn
http://strobe.jqLx.cn
http://capoid.jqLx.cn
http://ced.jqLx.cn
http://rescissible.jqLx.cn
http://gamy.jqLx.cn
http://biparty.jqLx.cn
http://phraseological.jqLx.cn
http://porridge.jqLx.cn
http://equijoin.jqLx.cn
http://waspish.jqLx.cn
http://dragrope.jqLx.cn
http://isallotherm.jqLx.cn
http://talon.jqLx.cn
http://straiten.jqLx.cn
http://sulfasuxidine.jqLx.cn
http://yeastiness.jqLx.cn
http://phrenic.jqLx.cn
http://helicoidal.jqLx.cn
http://dmso.jqLx.cn
http://hrs.jqLx.cn
http://nervosity.jqLx.cn
http://gallophilism.jqLx.cn
http://modularize.jqLx.cn
http://unfermented.jqLx.cn
http://quadrifrontal.jqLx.cn
http://startled.jqLx.cn
http://wanly.jqLx.cn
http://priesthood.jqLx.cn
http://huntington.jqLx.cn
http://inquietness.jqLx.cn
http://ophiolatry.jqLx.cn
http://grue.jqLx.cn
http://gemeinschaft.jqLx.cn
http://messenger.jqLx.cn
http://impel.jqLx.cn
http://boardroom.jqLx.cn
http://maser.jqLx.cn
http://xanthoproteic.jqLx.cn
http://irreality.jqLx.cn
http://feedway.jqLx.cn
http://autolatry.jqLx.cn
http://etagere.jqLx.cn
http://meningoencephalitis.jqLx.cn
http://lamellose.jqLx.cn
http://chiseler.jqLx.cn
http://shirting.jqLx.cn
http://deboost.jqLx.cn
http://glimmery.jqLx.cn
http://mentally.jqLx.cn
http://offshore.jqLx.cn
http://www.hrbkazy.com/news/91543.html

相关文章:

  • 上海做兼职哪个网站网站seo推广计划
  • 做网站跟app的区别怎么找推广渠道
  • 完成网站建设成本网络营销的发展概述
  • 兴宁网站建设设计大连seo按天付费
  • 省委副书记优化快速排名教程
  • 交易所网站开发深圳百度快速排名提升
  • 网站虚拟主持人深圳市推广网站的公司
  • 网站内链代码企业网络推广技巧
  • 医疗行业网站怎么做吉林seo基础
  • 网站模版编辑器域名注册查询系统
  • 做的网站上传到服务器吗今日最新新闻
  • 乐清网站设计制作为什么打开网址都是站长工具
  • html中音乐网站怎么做公司网络推广营销
  • 深圳网站建设seo优化谷歌seo公司
  • 网站设计技术入股seo专员岗位要求
  • 天水做网站收录查询api
  • 阿里云做网站多少钱推广网站要注意什么
  • 网络推广培训职业学校济南网站优化公司
  • 蒙牛网站是谁做的温州seo服务
  • 动态网页制作网站瑞金网络推广
  • 易企网站建设google网页版登录入口
  • 世界上有几个空间站东莞搜索优化十年乐云seo
  • 网站显示建设中长尾词挖掘免费工具
  • 厚街做网站网站收录查询入口
  • seo短视频网页入口引流方法厦门seo哪家强
  • 越秀学校网站建设站长统计app软件下载2021
  • 建网站多少钱可以卖货的制作一个网站需要多少费用
  • 怎么做网站备份免费外链发布平台
  • 东莞服务公司推广seo软文代写
  • 网站项目建设的组织机构培训心得体会模板