使用Token管理用户session

devtools/2024/9/23 1:13:19/

起因:单点登录问题,登录时访问的是tomcat1,访问获取用户数据时访问的是tomcat2,而用户的session信息在tomcat1上存储,tomcat2并不知道该用户来过,所以在获取个人信息时从session中获取不到数据,所以就显示该用户未登录

改用Token(JWT)来管理用户会话和认证,可以按照以下步骤进行修改:

  1. 引入JWT依赖
    首先,需要在项目的pom.xml中引入JWT相关的依赖。
java"><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version>
</dependency>
  1. 生成和验证Token
    接下来,在用户服务中实现Token的生成和验证逻辑。在用户登录成功后,生成一个JWT Token:
java">import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;public class JwtUtil {private static final String SECRET_KEY = "yourSecretKey"; // 应该放在配置文件中public static String generateToken(User user) {long now = System.currentTimeMillis();long exp = now + 1000 * 60 * 60; // Token有效期,例如1小时return Jwts.builder().setSubject(user.getMobile()) // 可以将用户的手机号作为Subject.setIssuedAt(new Date(now)).setExpiration(new Date(exp)).signWith(SignatureAlgorithm.HS512, SECRET_KEY).compact();}//用于解析Tokenpublic static Claims parseToken(String token) {return Jwts.parser().setSigningKey(SECRET_KEY).parseClaimsJws(token).getBody();}
}

然后在doLogin方法中使用JwtUtil.generateToken(user)来生成Token,并将Token返回给客户端。验证Token创建一个过滤器或拦截器来解析请求中携带的Token,并进行验证:

java"> //JwtAuthenticationFilter - 拦截请求并验证JWT Token
import org.springframework.web.filter.OncePerRequestFilter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;public class JwtAuthenticationFilter extends OncePerRequestFilter {@Overrideprotected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)throws ServletException, IOException {String token = request.getHeader("Authorization");if (token != null && !token.isEmpty()) {try {Claims claims = JwtUtil.parseToken(token);// 这里将用户信息设置到SecurityContext或者请求中request.setAttribute("user", claims.getSubject());} catch (Exception e) {// Token验证失败的处理response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Token验证失败");return;}}filterChain.doFilter(request, response);}
}
  1. SecurityConfig - 配置安全性
    这里需要配置Spring Security来使用我们的JwtAuthenticationFilter:
java">import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.csrf().disable().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and().addFilterBefore(new JwtAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class).authorizeRequests().antMatchers("/login").permitAll().anyRequest().authenticated();}
}

http://www.ppmy.cn/devtools/56282.html

相关文章

C++ 教程 - 07 类的静态成员

文章目录 静态成员 静态成员 使用static修饰的成员&#xff1b; 静态的成员变量&#xff1b; 仅保留一份副本&#xff0c;不管创建多少个实例对象&#xff0c;都共享这一份数据&#xff1b;类、对象均可以调用&#xff1b;类外重新声明&#xff0c;并通过类初始化&#xff1b;…

基于weixin小程序新生报到系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;学生管理&#xff0c;班级信息管理&#xff0c;师资力量管理&#xff0c;宿舍信息管理&#xff0c;宿舍安排管理&#xff0c;签到信息管理&#xff0c;论坛管理 小程序功能包括&#xff1a;系统首页&a…

如何策划一场成功的品牌推广?案例+模板,一网打尽!

在当下的商业竞争环境中&#xff0c;品牌推广已成为企业成功的关键。然而要策划一场成功的品牌推广活动&#xff0c;不仅需要创新的思维&#xff0c;还需要对品牌IP打造和搜索流量有深入的了解。 作为一名手工酸奶品牌创始人&#xff0c;目前全国也复制了100多家门店。本文将通…

vue3+ts:监听dom宽高变化函数

一、效果展示 二、代码 getSize.ts import { ref, Ref, watchEffect } from "vue";export const getWidth (domRef: Ref<HTMLElement | null>) > {const width ref<number>(0);const height ref<number>(0);const observer new ResizeObs…

大语言模型预训练数据集及清洗框架介绍【简单版】

目录 一、常见数据集类型 &#x1f4da; 二、数据清洗框架对比 &#x1f9f9; SlimPajama MNBVC CC-NET 三、理想的清洗框架 &#x1f4af; 四、数据清洗核心流程 &#x1f504; 五、现有数据集反思 &#x1f914; 六 中文预训练数据集 &#x1f1e8;&#x1f1f3; 1…

畅谈GPT-5

前言 ChatGBT(Chat Generative Bidirectional Transformer)是一种基于自然语言处理技术的对话系统,它的出现是人工智能和自然语言处理技术发展的必然趋势。随着技术的更新和进步&#xff0c;GPT也迎来了一代代的更新迭代。 1.GPT的回顾 1.1 GPT-3的介绍 GPT-3&#xff08;Gen…

计算机视觉 | 基于图像处理和边缘检测算法的黄豆计数实验

目录 一、实验原理二、实验步骤1. 图像读取与预处理2. 边缘检测3. 轮廓检测4. 标记轮廓序号 三、实验结果四、完整代码 Hi&#xff0c;大家好&#xff0c;我是半亩花海。 本实验旨在利用 Python 和 OpenCV 库&#xff0c;通过图像处理和边缘检测算法实现黄豆图像的自动识别和计…

Axure RP 9 安装详细笔记

一、下载 1.官网下载地址 Axure RP 9 MAC正式版&#xff1a;https://axure.cachefly.net/versions/9-0/AxureRP-Setup-3740.dmgAxure RP 9 WINDOWS正式版&#xff1a;https://axure.cachefly.net/versions/9-0/AxureRP-Setup-3740.exe2.网盘下载 链接&#xff1a;https://pa…