springBoot+redis实现登入拦截器--系统框架搭建(二)

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: springBoot+redis实现登入拦截器--系统框架搭建(二)

环境需求:redis3.8.2+maven+springBoot+jdk1.8模板

 

1、需求背景


周末在家,上家同事突然联系,让我给他网站,于是自己先梳理逻辑,实现功能并且记录下来。


这篇文章主要在上篇文章的基础上,实现登入拦截,保证用户在必须在登入的情况下,才能任意访问网站,因为上篇文章做SSO单点登入时,我们已经把用户信息存入redis,所以在拦截登入的时候,直接在redis里面取用户信息,判断用户是否登入过系统,用于拦截。


对redis实现系统单点登入功能感兴趣的同学,可以点进去看看:


Redis实现Single单点登入--系统框架搭建(一)


2、功能实现演示


1、需要自己定义的配置类实现WebMvcConfigurer,


2、在方法preHandler里在每次访问接口前判断是否用户已登入,若redis存在用户信息,则返回true,业务继续进行,若未登入,返回false,并且用response跳转到登入页面,

那么登入页面的url从哪来呢,用request获取项目的虚拟路径,后面需要跳转的首页路径自己拼接。


3、拦截全部接口,那怎么能访问首页呢,所以要配置登入页面白名单,还有需要加载的js,css,png都配置成白名单。

 

当上面的全部实现后,就能看到,不论登入什么接口,都会跳转到system1当前接口来,想要实现这个功能,登入之后,就能任意访问。

image.png


3、代码详解


@Configuration
@Slf4j
public class LoginConfiguration implements WebMvcConfigurer {
    @Resource
    private RedisTemplate redisTemplate;
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //注册拦截器
        InterceptorRegistration interceptorRegistration = registry.addInterceptor(new HandlerInterceptor() {
            @Override
            public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
                throws Exception {
                 log.info("登入拦截器启动!!");
                log.info("session是否存在:{}", request.getSession().getAttribute("name"));
                if (request.getSession().getAttribute("name") != null) {
                    redisTemplate.opsForValue().set("name", request.getSession().getAttribute("name"), 10,TimeUnit.SECONDS);
                    return true;
                }
                log.info("request.getContextPath():{}", request.getContextPath());
                response.sendRedirect(request.getContextPath() + "/redis/single/system1");
                //如果设置为false时,被请求时,拦截器执行到此处将不会继续操作
                //如果设置为true时,请求将会继续执行后面的操作
                return false;
            }
            @Override
            public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
                ModelAndView modelAndView) throws Exception {
                log.info("postHandle");
            }
            @Override
            public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
                Exception ex) throws Exception {
                log.info("afterCompletion");
            }
        });
        //所有路径都被拦截
        interceptorRegistration.addPathPatterns("/**");
        //添加不拦截路径
        interceptorRegistration.excludePathPatterns(
            //"/redis/single/login_page",
            "/redis/single/system1",
            "/redis/single/system2",
            "/redis/single/detection",
            "/**/*.html",
            "/**/*.js",
            "/**/*.css",
            "/**/*.woff",
            "/**/*.ttf"
        );
    }
}
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
打赏
0
0
0
0
121
分享
相关文章
|
1天前
|
Springboot使用Redis实现分布式锁
通过这些步骤和示例,您可以系统地了解如何在Spring Boot中使用Redis实现分布式锁,并在实际项目中应用。希望这些内容对您的学习和工作有所帮助。
108 83
对Spring、SpringMVC、MyBatis框架的介绍与解释
Spring 框架提供了全面的基础设施支持,Spring MVC 专注于 Web 层的开发,而 MyBatis 则是一个高效的持久层框架。这三个框架结合使用,可以显著提升 Java 企业级应用的开发效率和质量。通过理解它们的核心特性和使用方法,开发者可以更好地构建和维护复杂的应用程序。
108 29
|
1月前
基于springboot+thymeleaf+Redis仿知乎网站问答项目源码
基于springboot+thymeleaf+Redis仿知乎网站问答项目源码
133 36
通过springboot框架创建对象(一)
在Spring Boot中,对象创建依赖于Spring框架的核心特性——控制反转(IoC)和依赖注入(DI)。IoC将对象的创建和管理交由Spring应用上下文负责,开发者只需定义依赖关系。DI通过构造函数、setter方法或字段注入实现依赖对象的传递。Spring Boot的自动配置机制基于类路径和配置文件,自动为应用程序配置Spring容器,简化开发过程。Bean的生命周期包括定义扫描、实例化、依赖注入、初始化和销毁回调,均由Spring容器管理。这些特性提高了开发效率并简化了代码维护。
springboot图书馆管理系统前后端分离版本
springboot图书馆管理系统前后端分离版本
39 12
基于SpringBoot+Vue实现的大学生就业服务平台设计与实现(系统源码+文档+数据库+部署等)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
64 6
基于Java+SpringBoot+Vue实现的车辆充电桩系统设计与实现(系统源码+文档+部署讲解等)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
56 6
基于SpringBoot+Vue的班级综合测评管理系统设计与实现(系统源码+文档+数据库+部署等)
✌免费选题、功能需求设计、任务书、开题报告、中期检查、程序功能实现、论文辅导、论文降重、答辩PPT辅导、会议视频一对一讲解代码等✌
40 4
基于SpringBoot+Vue实现的大学生体质测试管理系统设计与实现(系统源码+文档+数据库+部署)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
37 2
基于SpringBoot+Vue实现的冬奥会科普平台设计与实现(系统源码+文档+数据库+部署)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
44 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等