分布式session之token解决方案实现

2D Nesting Defining a CSV File of Part Data 若。 阅读详情

分布式session之token解决方案实现

基于令牌(Token)方式实现Session解决方案,因为Session本身就是分布式共享连接

用token代替session

废话不多说,看项目:

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId> com.toov5.tokenSession</groupId>
  <artifactId>tokenSession</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
  <parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.0.RELEASE</version>
		<relativePath /> <!-- lookup parent from repository -->
	</parent>
	<properties>
		<weixin-java-mp.version>2.8.0</weixin-java-mp.version>
		<maven.compiler.source>1.8</maven.compiler.source>
		<maven.compiler.target>1.8</maven.compiler.target>
		<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.build.locales>zh_CN</project.build.locales>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
			<!-- <exclusions> <exclusion> <groupId>com.fasterxml.jackson.core</groupId> 
				<artifactId>jackson-databind</artifactId> </exclusion> </exclusions> -->
		</dependency>
		<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.47</version>
		</dependency>
		<!-- Testing Dependencies -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-redis</artifactId>
		</dependency>
		<!--spring session 与redis应用基本环境配置,需要开启redis后才可以使用,不然启动Spring boot会报错 -->
           <dependency>
			<groupId>org.springframework.session</groupId>
			<artifactId>spring-session-data-redis</artifactId>
		</dependency> 
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-pool2</artifactId>
		</dependency>
		<dependency>
			<groupId>redis.clients</groupId>
			<artifactId>jedis</artifactId>
		</dependency>

	</dependencies>
	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<maimClass>com.meiteedu.WxMpApplication</maimClass>
				</configuration>
				<executions>
					<execution>
						<goals>
							<goal>repackage</goal>
						</goals>
					</execution>
				</executions>

			</plugin>
		</plugins>
	</build>
</project>

 yml

server:
  port: 8081
spring:
  redis:
    database: 0   
    host:  192.168.91.3
    port:  6379
    password:  123
    jedis:
      pool:
        max-active: 8
        max-wait: -1
        max-idle: 8
        min-idle: 0
    timeout: 10000
redis:
  hostname: 192.168.91.3     
  port:  6379
  password:  123

  redis

package com.toov5.service;
import java.util.Set;
import java.util.concurrent.TimeUnit;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;

@Component
public class RedisService {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    //这样该方法支持多种数据类 
    public void set(String key , Object object, Long time){
        if (object instanceof String ) {  //判断下是String类型�?
            String argString =(String)object;  //强转�?
            //存放String类型
            stringRedisTemplate.opsForValue().set(key, argString);
        }
        //如果存放Set类型
        if (object instanceof Set) {
            Set<String> valueSet =(Set<String>)object;
            for(String string:valueSet){
                stringRedisTemplate.opsForSet().add(key, string);  //此处点击下源码看 第二个参数可以放好多
            }
        }
        //设置有效�
        if (time != null) {
            stringRedisTemplate.expire(key, time, TimeUnit.SECONDS);
        }
        
    }
    //做个封装
    public void setString(String key, Object object){
        String argString =(String)object;  //强转
        //存放String类型
        stringRedisTemplate.opsForValue().set(key, argString);
    }
    public void setSet(String key, Object object){
        Set<String> valueSet =(Set<String>)object;
        for(String string:valueSet){
            stringRedisTemplate.opsForSet().add(key, string);  //此处点击下源码看 第二个参数可以放好多
        }
    }
    
    public String getString(String key){
     return    stringRedisTemplate.opsForValue().get(key);
    }
    
    
}

token的封装

package com.toov5.service;

import java.util.UUID;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import ch.qos.logback.core.subst.Token;

@Service
public class TokenService {
     @Autowired
    private RedisService redisService;
    
    
    // 1 使用token方式替代session功能
    //存入和获取
    public  String put(Object value){
        //判断您是否为空
        if (value == null) {
            return null;
        }
        // 先生成对应的token(token 实际上等于key)
        String token = getToken();
        //存入在redis中
        redisService.setString(token, value);
        //直接返回对应的token
        
        return token;
    }
    
    public String get(String token){
      return redisService.getString(token);        
    }
    

  public String getToken(){
      return UUID.randomUUID().toString();
  }
    
}

controller

package com.toov5.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.toov5.service.TokenService;

@RestController
public class TestTokenController {

    @Autowired
    private TokenService tokenService;
    
    //使用token方式替代session     sessiong服务器端创session 返回sessionid
    @RequestMapping("/put")
    public String put(String value){
         String string = tokenService.put(value);
         System.out.println(string);
        return string;
    }
    //生成好的token如何存放? 移动端存放本地文件  浏览器cookie
    
    
    @RequestMapping("/get")
    public String get(String object){
        return tokenService.get(object);
    }
    
    //http如何传递? 放在请求头里面  最好建议请求头里面
    
    
    
     
}

运行访问

怎么刷新都能获取到哦

 

redis 在服务器集群的时候 分布式缓存可以共享

 

【A2DP】规范精讲[1]: 深入解析A2DP协议的核心架构 在蓝牙技术发展的早期阶段,音频传输主要通过SCO(同步面向连接)链路实现,这种设计主要针对语音通信,音质有限且功能单一。随着人们对无线高质量音频需求的增长,​​Advanced Audio Distribution Profile (A2DP)​​ 应运而生,成为蓝牙音频传输的技术基石。 阅读详情

相关推荐

用示波器抓取同步Buck自举电容波形:从充电回路到SW节点振铃的完整分析

本文通过实测TI TPS54561和MPS MPQ4572同步Buck芯片,详细解析了自举电容在充电、维持和放电三个工作阶段的波形特征。重点揭示了电感泄放回路与充电回路重叠时,在SW节点引发的振铃现象及其产生机理,并提供了串联阻尼电阻等有效的工程抑制方法。文章结合示波器实测,为硬件工程师提供了从波形观测到问题调试的完整实践指南。

weixin_29276847的博客 373

分布式session解决方案 — — JWT(生成token)

分布式session解决方案 — — JWT(生成token)

weixin_45565886的博客 1484

利用LTspice设计Pt100测温电路

是一种广泛使用的温度传感器,它属于(RTD, Resistance Temperature Detector)的类型,通常用于温度测量。在0°C时,的电阻值为100欧姆,且它的电阻值会随着温度的升高而升高。PT100热电阻温度阻值对应表)因此可以根据这一特性来检测出环境温度。

2301_77033628的博客 2417

分布式day10_01-基于Token令牌方式解决Session共享

在使用 spring - session 方式实现分布式session一致性的基础上再加上代码 创建TestTokenController package com.itmayiedu.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework....

pyd1040201698的博客 769

DroidGuard虚拟机逆向解析:指令集、密钥派生与反调试机制

DroidGuard是Google在Android生态中部署的轻量级定制虚拟机,用于设备完整性校验。其核心原理是通过自解释字节码、多层混淆指令集与动态密钥派生机制,在ART运行时构建静默安全沙箱。技术价值在于规避传统API检测盲区,实现高鲁棒性环境感知;典型应用场景包括金融SDK风控、Play Services可信启动及合规性审计。本文深入拆解其4字节指令编码规则、基于设备指纹的三阶段密钥派生(SHA256→Feistel→AES)、以及五层反调试体系(ptrace快照、时间差分、内存页探测、指令流校验、服

weixin_32736961的博客 587

ethercat linux lan9252 - lan9253调试

linux 的ethercat测试

linsheng_111的专栏 1934

分布式部署:token共享代替session共享

java

Brave_heart4pzj的博客 4632

Mixly/Arduino实战:WS2812点阵动态显示自定义图案与汉字

本文手把手教你使用Mixly和Arduino驱动WS2812点阵屏,实现自定义图案与汉字的动态显示。内容涵盖硬件连接、取模软件设置、高效数据处理技巧(巧用Excel)、Mixly图形化编程及Arduino代码解析,并深入探讨动态显示与滚动汉字原理,最后提供常见问题排查与性能优化心得,助你从零开始轻松玩转智能硬件。

weixin_29185199的博客 454

session理论以及解决分布式系统下的session共享问题

一、广义的session 二、可以理解为一种保存key-value的机制: session机制中的关键点是如何去设置和获取key,另外一点是能够设置和保存正确的value。从key的方面看有两种:sessionId和token 1、sessionId很常见,客户端请求服务端的时候,服务端通过 set cookie就可以在http头里面这个sessionId设置key

qq_33387902的博客 4354

【CAD二次开发】炸开所有的嵌套块

代码】【CAD二次开发】炸开所有的嵌套块。

1513

UFSV3.1-RPMB实现与测试

UFS RPMB功能验证与测试指南 本文介绍了UFS(通用闪存存储)中RPMB(重放保护内存块)的功能验证与测试方法。主要内容包括: RPMB基础配置: 在Linux系统中查看RPMB设备节点 读取RPMB单元描述符获取配置信息 配置RPMB区域大小(16MB)和使能状态 RPMB特性验证: 获取单次写最大请求(16KB) 测试未编程认证密钥时的读写操作 验证认证密钥编程过程 测试用例: 包含4个测试用例,验证RPMB在不同状态下的行为 提供了详细的命令行操作和预期结果 本文可作为UFS RPMB功能验证。

小码哥的博客 1255

无法在分布式环境中共享数据

Sa-Token-Redis 集成包的版本尽量与 Sa-Token-Starter 集成包的版本一致,否则可能出现兼容性问题。等专业的缓存中间件中, 做到重启数据不丢失,而且保证分布式环境下多节点的会话一致性。优点:兼容性好,缺点:Session 序列化后基本不可读,对开发者来讲等同于乱码。优点:Session 序列化后可读性强,可灵活手动修改,缺点:兼容性稍差。为此,Sa-Token 提供了扩展接口,你可以轻松将会话数据存储在。properties 风格。复制到剪贴板错误复制成功。

zollty的专栏 1341

cuRobo 入门教程(一)基于CUDA的机器人运动规划加速库

cuRobo是一款基于CUDA加速的机器人算法库,提供运动学计算、碰撞检测、轨迹优化等功能。该库采用并行优化技术,在GPU上实现高效运算,比现有方案快60倍。cuRobo支持多种机器人模型和环境表示,包含正向/逆向运动学、无碰撞轨迹生成、模型预测控制等核心算法,并可与IsaacSim等仿真平台集成。其特点包括:1) 支持多种碰撞检测方式(长方体/网格/深度图像);2) 提供批量环境处理和实时世界更新;3) 通过CUDA Graphs加速优化迭代;4) 在Jetson Orin等平台实现毫秒级运动规划。安装支

2506_90492529的博客 1931

编程自学指南:java程序设计开发,会话管理进阶(分布式 Session/Token),分布式 Session 解决方案的原理与实现, JWT Token 的工作流程与实战应用

编程自学指南:java程序设计开发,会话管理进阶(分布式 Session/Token),分布式 Session 解决方案的原理与实现, JWT Token 的工作流程与实战应用

zl515035644的博客 1191

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

token升级(考虑在分布式环境中布置token,结合session保证请求调用过程中token不会过期。)

思路: 首先,用户的需求是确保使用同一个Token的外部调用都在一个Session中处理。之前的回答提到了Token与Session绑定、安全措施、Session管理、分布式处理等。现在需要用Java来展示这些步骤。我需要考虑Java中常用的框架,比如Spring Boot,因为它广泛用于API开发。同时,使用Redis作为Session存储,这在Java中通常通过Spring Data Redis或Lettuce库实现。然后,生成Token部分,Java中常用JWT,可以用jjwt库来生成和解析。

Jonah的博客 1452

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

63-分布式解决方案-分布式Session一致性问题

文章目录1. 分布式session一致性概述2. session的底层实现原理3. 分布式session一致性解决方案4. 方案5和方案6 1. 分布式session一致性概述 分布式Session一致性(服务器集群session共享问题) session的作用?(服务端与客户端保存整个通讯的会话信息) 应用场景 (账号密码登陆成功之后,获取到userId,存放到session,下次获取用户信息...

weixin_43594483的博客 295

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

分布式系统中使用分布式session和token的区别

一、分布式session 因为是分布式的系统,传统的单机session不适用于分布式系统中,可以使用分布式session。 本质是使用第三方的数据库(建议是非关系型数据库)来存储session信息,例如Redis、Mongo DB,可以使用spring 提供的spring session组件 用户登录请求发送到服务器后,服务器进行校验,如果通过,服务器会使用session把用户的信息临时保存在了服务器上,客户端同时也会存将session信息存储在cookie上,离开网站后session会被销毁。 Sessi

q1787419288的博客 3127

浅谈Session和Token

Session和Token的区别及使用

weixin_72125569的博客 1828

【Redis】分布式Session

一、问题引出 1.1 Session的原理 1.2 问题概述 二、解决方案 三、代码实现-使用Token代替Session 3.1 Service 3.2 TokenController 一、问题引出 1.1 Session的原理 //默认创建一个session,默认值为true没有找到对应的session 自动创建session Http...

diaolin2115的博客 194

分布式Session

一 . Session与Cookie区别 1.1 Cookie 简单介绍: Cookie(小甜饼)是浏览器保存在本地的文本内容,常常搭配Session来保持用户登陆态 特性(不只一点): 只能携带同一域名下或子域名(可通过修改domain)的cookie到服务端 localhost与127.0.0.1虽然意思相同但是它们却属于跨域访问:无法携带cookie到另一域下 1.2 Session 简单介绍: Session是服务器端使用的一种记录客户端状态的机制,使用上比Cookie简单一些,相应的也增加了

zhangliewena的博客 224

集群部署时的分布式 Session 如何实现?

面试题 集群部署时的分布式 session 如何实现? 面试官心理分析 面试官问了你一堆 dubbo 是怎么玩儿的,你会玩儿 dubbo 就可以把单块系统弄成分布式系统,然后分布式之后接踵而来的就是一堆问题,最大的问题就是分布式事务、接口幂等性、分布式锁,还有最后一个就是分布式 session。 当然了,分布式系统中的问题何止这么一点,非常之多,复杂度很高,这里只是说一下常见的几个问题,也...

u014513171的博客 250

php分布式session问题,分布式session一致性问题

1,什么是sessionsession 是客户端与服务器通讯会话技术,比如用户登陆,会将登陆之后,将用户信息存入在session中2,session 的原理 3,简单的session 例子@RestControllerpublic classIndexController {@RequestMapping("/createSession")publicString createSession(Ht...

weixin_34284072的博客 374

分布式解决方案------session一致性问题

前言 分布式session 问题造成的原因是因为集群造成的。 常说的解决方案有6种: ip_hash: nginx 分发服务的时候,绑定ip,但这样就没有负载均衡效果了 tomcat 内置的session 同步,这个有延时,没有人用,很垃圾 使用cookie 代替session,也没有人用,太不安全 使用 数据库同步session ,效率太差了,也不用 spring -session 框架同步 ...

xudong的博客 380

分布式07 - 分布式会话

分布式07 - 分布式会话

qq_43350524的博客 942

微服务环境下sa-token session同步

微服务是分布式的实现,网关和授权服务分别是两个独立的服务,查看官方文档,我们应该实现分布式session的同步,引入官方的redis依赖,并且两个服务都需要引入,自此sa-token框架会帮我们在redis中同步session,不需要你做更多的操作,这里注意的是网关gateway采用的webflux框架,不同于授权服务的springboot框架,引入的sa-token依赖是不同的,官网也指出了这一点。,并且后续想要在网关进行权限验证,就必须获得当前请求会话中登录的id去数据库查询对应的角色权限。

c_afield的博客 1050
上一篇: 浏览器
下一篇: Zookeeper实现Master选举(哨兵机制)
Art&Code
博客等级 码龄7年 77粉丝 554原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值