首页 > 数据库 >Redis实现登录(基于session)

Redis实现登录(基于session)

时间:2023-10-18 23:33:00浏览次数:43  
标签:Exception 拦截器 登录 Object Redis session user public

Redis实现登录(基于session)

Redis实现登录(基于session)_拦截器

拦截器:实现多模块用户登录的校验

Redis实现登录(基于session)_拦截器_02

代码:

创建拦截器

public class LoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //1.获取session
        HttpSession session = request.getSession();
        //2.获取session中的用户
        Object user = session.getAttribute("user");
        //3.判读用户是否存在
        if (user == null) {
            //不存在,拦截,返回401状态码
            response.setStatus(401);
            return false;
        }
        //5.存在,保存用户信息到 ThreadLocal ThreadLocal 线程隔离
        UserHolder.saveUser((UserDTO) user);
        return true;
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        UserHolder.removeUser();
    }
}

WebMvcConfigurer配置接口是Spring内部的一种配置方式,采用JavaBean的形式来代替传统的xml配置文件形式进行针对框架个性化定制。接口提供了很多方法让我们来定制SpringMVC的配置。可以用来自定义处理器、拦截器、视图解析器、转换器、设置跨域等。

  • SpringBoot1.5版本前都是靠重写WebMvcConfigurerAdapter的方法来添加自定义拦截器,消息转换器等。
  • SpringBoot2.0版本后,WebMvcConfigurerAdapter类被标记为@Deprecated。推荐下面两种方式:
  • 实现WebMvcConfigurer接口(推荐);
  • 继承WebMvcConfigurationSupport类。
@Configuration
public class MvcConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginInterceptor())
                //需要放行的路径
                .excludePathPatterns(
                        "/shop/**",
                        "/voucher/**",
                        "/shop-type/**",
                        "/upload/**",
                        "/blog/hot",
                        "/user/code",
                        "/user/login"
                );
    }
}

扩展:Session是什么东西


集群的session共享问题

Redis实现登录(基于session)_拦截器_03


session共享问题:多台Tomcat并不共享session存储空间,当请求切换到不同tomcat服务时导致数据丢失的问题。

session的替代方案应该满足:

●数据共享

●内存存储

●key、value结构

基于Redis实现session共享

Redis实现登录(基于session)_拦截器_04

标签:Exception,拦截器,登录,Object,Redis,session,user,public
From: https://blog.51cto.com/AmbitionGarden/7924591

相关文章

  • redis管道
    redis管道1.事务四大特性:-原子性:要么都成功,要么都失败-一致性:数据前后要一致-隔离性:多个事务之间互不影响-持久性:事务一旦完成,数据永久改变2.关系型数据库,支持事务3.redis有没有事务?没有专门的事情,但是通过标的方式可以实现事务的几个特性,所以我们......
  • redis其它操作,
    1redis其它操作......
  • SpringBoot 04 shiro数据认证及登录
     实体类@Data@AllArgsConstructor@NoArgsConstructor@TableName("t_user")publicclassRUser{@TableId(value="usr_id",type=IdType.AUTO)privateIntegerusrId;privateStringusrName;privateStringusrAccount;pr......
  • redis
    redis介绍和安装redis什么-数据库就是个存数据的地方:只是不同数据库数据组织,存放形式不一样-mysql关系型数据库(oracle,sqlserver,postgrasql)-非关系型数据(nosql):redis,mongodb,clickhouse,infludb,elasticsearch,hadoop。。。-没有sql:没有sql语句-no......
  • Redisson 实现分布式锁
    Redisson实现分布式锁分布式锁的应用场景有哪些?实现的方式有哪几种?Redisson又是怎么实现的?1、应用场景、特点及实现方式1.1、分布式锁的应用场景主要有以下两类:提升处理效率:避免重复任务的执行,减少系统资源的浪费(例如幂等场景)。保障数据一致性:在多个微服务并发访问时,避免......
  • redis普通连接和连接池, redis字符串类型,redis hash类型, redis列表类型
    1redis普通连接和连接池......
  • 注册功能, 前端登录注册页面,前端登录功能,前端注册功能, redis介绍和安装
    1注册功能......
  • Redission并发锁报错:IllegalMonitorStateException: attempt to unlock lock, not loc
    生产上突然出现一条报错j.l.IllegalMonitorStateException:attempttounlocklock,notlockedbycurrentthreadbynodeid:1411e030-3c44-48d7-9eb6-6030022ce681thread-id:111ato.r.RedissonBaseLock.lambda$unlockAsync$2(RedissonBaseLock.java:323)......
  • WIndows 10 更新后,登录后黑屏【AppReadiness 问题】
    现象:更新Windows10版本 的累积更新KB4038788似乎会导致用户系统上登录时出现黑屏(用户可能需要长达5~10分钟才能登录)  临时解决方法:禁用APPReadiness服务 参考资料:https://support.microsoft.com/en-us/topic/black-screen-when-windows-10-restarts-after-a-......
  • uniLogin 一键登录
    一、通过传统服务器连接uniCloud云函数首先上传云函数:官网地址//云函数验证签名,此示例中以接受GET请求为例作演示constcrypto=require('crypto')exports.main=async(event)=>{constsecret='your-secret-string'//自己的密钥不要直接使用示例值,且注意不......