Redis实现登录(基于session)
  RuXuq8CpAyRj 2023年11月02日 25 0

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)_session共享_04

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
RuXuq8CpAyRj