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

相关推荐
一 乐1 小时前
动漫书销售商城|基于springboot + vue动漫书销售商城(源码+数据库+文档)
java·数据库·vue.js·spring boot·毕业设计
卓怡学长1 小时前
w214基于jsp知道特产网
java·intellij-idea
步行cgn1 小时前
Spring 注解使用详解
java·spring
一条小小yu2 小时前
Spring IoC的理解
java·后端·spring
落魄实习生2 小时前
Agent Scope Java 2.x 系列【7】工具使用
java·开发语言·ai
旺仔学长 哈哈2 小时前
springboot钓鱼爱好者交流平台APP设计与实现
java·spring boot·mysql·充电桩管理系统
自强的小白4 小时前
核心功能(Service接口)
java·mybatis
乌暮4 小时前
深入理解 Java 泛型:把「万能盒子」用对、用稳
java·开发语言·后端·学习
大猫和小黄5 小时前
深入理解 Java Optional:从设计哲学到工程实战
java