基于session Redis实现登录
Redis实现登录(基于session)
拦截器:实现多模块用户登录的校验
代码:
创建拦截器
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共享问题:多台Tomcat并不共享session存储空间,当请求切换到不同tomcat服务时导致数据丢失的问题。
session的替代方案应该满足:
●数据共享
●内存存储
●key、value结构
基于Redis实现session共享
到此这篇关于基于session Redis实现登录的文章就介绍到这了,更多相关Redis实现登录内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
redis键值出现\xac\xed\x00\x05t\x00&的问题及解决
这篇文章主要介绍了redis键值出现\xac\xed\x00\x05t\x00&的问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2023-07-07Spring Boot实战解决高并发数据入库之 Redis 缓存+MySQL 批量入库问题
这篇文章主要介绍了Spring Boot实战解决高并发数据入库之 Redis 缓存+MySQL 批量入库问题,本文通过图文实例相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2022-02-02
最新评论