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

相关推荐
Doubbbbbbble云2 分钟前
基于空间局部性的排序算法性能重构思路4
java·重构·排序算法
MetaLite27 分钟前
Java 时间处理的两个坑:单位误判,半秒算成一秒
java·开发语言·前端
黄骨鱼骨28 分钟前
DatI:给AI接入数据库,Agent时代的NL2SQL问数与多维表格应该怎么做
java·database·text2sql·nl2sql·chatbi·mcp·data agent
Wang's Blog1 小时前
Java框架快速入门: Spring Security+OAuth2之实现UserDetails与GrantedAuthority深度定制
java·spring·mybatis
Amberish1 小时前
26Java细节知识点总结
java
钱栈up1 小时前
qoder CLI 1.0.45 本地小说生成工作流搭建:Feature Gate 配置与长文本断连排查从死锁到全流程跑通:Python德州扑克项目的优化
java·前端·数据库
代码调试师1 小时前
【毕设分享】springboot攀枝花生鲜电商平台58990
java·vue.js·spring boot·后端·架构·eclipse·课程设计
xcl09251 小时前
全民健身解决方案小程序系统开发实战:从架构设计到上线指南
java·spring boot
洛阳泰山1 小时前
别卷 Python 了:我用 Java 21 + Spring Boot 3 打造了一个企业级 RAG + 智能体工作流引擎(附架构与源码解析)
java·spring boot·后端
杨运交2 小时前
[070][Web模块]Spring MVC TOTP 二次认证拦截器:设计与源码深度解析
前端·spring·mvc