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

spring session+redis存储session,实现用户登录功能,并在拦截器里面判断用户session是否过期,过期就跳转到登录页面

在Spring应用中,使用Redis存储Session是一种常见的方式,可以实现分布式环境下的Session管理。以下是实现用户登录功能,并在拦截器中判断Session是否过期并跳转到登录页面的基本步骤:

  1. 添加依赖:首先,确保你的项目中包含Spring Session和Spring Data Redis的相关依赖。

  2. 配置Redis:在Spring配置文件中配置Redis连接信息,以便Spring Session能够正确地将Session存储在Redis中。

  3. 编写登录逻辑:编写登录逻辑,通常包括验证用户身份,生成Session等。

  4. 编写拦截器:创建一个拦截器,用于在每个请求到达Controller之前检查Session是否过期。

  5. 配置拦截器:将拦截器配置到Spring MVC中,以便它能够拦截请求并执行相关逻辑。

下面是一个简单的示例:

1. 添加依赖:在你的项目中添加Spring Session和Spring Data Redis的依赖。如果使用Maven,可以在pom.xml中添加如下依赖:

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

2. 配置Redis:在application.propertiesapplication.yml中配置Redis连接信息:

spring.redis.host=your_redis_host
spring.redis.port=your_redis_port
spring.redis.password=your_redis_password (如果有的话)

3. 编写登录逻辑:创建一个Controller来处理用户登录请求:

@RestController
public class LoginController {@PostMapping("/login")public String login(@RequestParam String username, @RequestParam String password, HttpSession session) {// 假设这里是验证用户身份的逻辑if (isValidUser(username, password)) {session.setAttribute("username", username);return "Login successful";} else {return "Invalid credentials";}}private boolean isValidUser(String username, String password) {// 实现验证逻辑,比如查询数据库等// 这里简化为固定用户名密码return "admin".equals(username) && "password".equals(password);}
}

4. 编写拦截器:创建一个拦截器来检查Session是否过期:

public class SessionInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {HttpSession session = request.getSession(false);if (session == null || session.getAttribute("username") == null) {response.sendRedirect("/login"); // 跳转到登录页面return false;}return true;}
}

5. 配置拦截器:将拦截器配置到Spring MVC中:

 

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new SessionInterceptor())
                .addPathPatterns("/**")
                .excludePathPatterns("/login"); // 排除登录页面
    }
}
 

在这个示例中,当用户发送请求时,拦截器会检查Session是否存在且是否包含有效的用户名。如果Session不存在或用户名无效,用户将被重定向到登录页面。

相关文章:

  • HarmonyOS interface router scale pageTransition SlideEffect.Left ArkTS ArkUI
  • python -【五】数据容器
  • [双指针] --- 快乐数 盛最多水的容器
  • react记录部署
  • 信息学奥赛初赛天天练-15-阅读程序-深入解析二进制原码、反码、补码,位运算技巧,以及lowbit的神奇应用
  • c++编程(15)——list的模拟实现
  • Spring:IoC容器(基于XML管理bean)
  • J.搬砖【蓝桥杯】/01背包+贪心
  • Redis 常用基本命令
  • 端口扫描利器--nmap
  • 使用 Django Rest Framework 构建强大的 Web API
  • Android Studio | 小白如何运行别人的安卓项目
  • dp秒杀优惠券
  • k8s部署calico遇到的问题
  • python -【四】函数
  • [译] React v16.8: 含有Hooks的版本
  • 【面试系列】之二:关于js原型
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • C# 免费离线人脸识别 2.0 Demo
  • Docker容器管理
  • Java程序员幽默爆笑锦集
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • 初识 webpack
  • 从setTimeout-setInterval看JS线程
  • 给新手的新浪微博 SDK 集成教程【一】
  • 使用common-codec进行md5加密
  • 鱼骨图 - 如何绘制?
  • ​ssh免密码登录设置及问题总结
  • # include “ “ 和 # include < >两者的区别
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (python)数据结构---字典
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (微服务实战)预付卡平台支付交易系统卡充值业务流程设计
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (转)可以带来幸福的一本书
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • *上位机的定义
  • .Net CoreRabbitMQ消息存储可靠机制
  • .NET 读取 JSON格式的数据
  • .net打印*三角形
  • .NET国产化改造探索(三)、银河麒麟安装.NET 8环境
  • .net后端程序发布到nignx上,通过nginx访问
  • .net连接oracle数据库
  • .Net下使用 Geb.Video.FFMPEG 操作视频文件
  • [.net 面向对象程序设计进阶] (19) 异步(Asynchronous) 使用异步创建快速响应和可伸缩性的应用程序...
  • [20190401]关于semtimedop函数调用.txt
  • [Angular] 笔记 9:list/detail 页面以及@Output
  • [BZOJ2208][Jsoi2010]连通数