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 {

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

相关推荐
爱学习的小可爱卢2 分钟前
JavaEE进阶——SpringBoot拦截器详解:从入门到实战
java·spring boot·后端
凛_Lin~~4 分钟前
安卓 面试八股文整理(基础组件篇)
java·安卓
ooolmf9 分钟前
matlab2024读取温度01
java·前端·javascript
曹牧12 分钟前
Java:Foreach语法糖
java·开发语言·python
编程火箭车13 分钟前
【Java SE 基础学习打卡】24 循环结构 - while
java·编程基础·循环结构·while循环·java se·do-while循环·避免死循环
Haooog13 分钟前
微服务保护学习
java·学习·微服务·sentinel
程序员云帆哥15 分钟前
告别Swagger!Spring Boot集成Smart-Doc自动生成API文档
java·接口文档·api文档
222you17 分钟前
SpringIOC的注解开发
java·开发语言
hgz071019 分钟前
Spring Boot、Spring MVC、Spring 三者核心区别
java
god0026 分钟前
Selenium等待判断元素页面加载完成
java·开发语言