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.properties或application.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 {

    @Override
    public 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不存在或用户名无效,用户将被重定向到登录页面。

相关推荐
虹科网络安全8 小时前
Redis Radar:在统一视图中掌握 Redis 部署、健康与容量
经验分享·redis·艾体宝·艾体宝it·艾体宝redis
非优秀程序员8 小时前
第04章 邮箱大战,163 与 QQ 的暗战|《互联网产品恩仇录》
java·vue.js·架构
知已难寻8 小时前
Docker 入门:容器技术与 Docker 基础
java·运维·服务器·docker·云原生·容器
大大大大晴天9 小时前
每天认识一个组件:Redis
redis
文丑颜不良啊10 小时前
LeetCode2481~2500题目解析
java·leetcode
Flynn Liang11 小时前
同一需求三套写法:用 Spring AI、LangChain4j、AgentScope Java 各实现一个带工具调用的 RAG 助手(实战对比)
java·人工智能·大模型·架构设计·spring ai·langchain4j·agentscope
聪明的笨猪猪12 小时前
实际工程问题:AI 生成 Spring Cache(@Cacheable / @CachePut / @CacheEvict)缓存注解踩坑
java·经验分享·面试·ai编程
愿有所息12 小时前
记一次 ARM64 + JDK8 上 fastjson2 的诡异数据错乱
java
秋饼13 小时前
MCP 2026-07-28 无状态协议大改版:Spring AI 2.1 多轮往返请求与网关路由落地
java·ai·技术分享·后端开发