SpringMVC拦截器的实现和作用及Redis登陆功能的优化详解

2023-05-16 0 5,106

目录

一、分析

项目中添加Spring MVC拦截器,拦截器怎么实现的,它的作用是什么?

拦截器的作用:让未登录的用户不能访问某些页面。 拦截器是在controller代码执行之前,根据用户请求做出相应的处理;

Spring Boot中的拦截器和Spring MVC中的一样,流程是:

1、先定义一个拦截器类,并且这个类需要实现HandlerInterceptor接口,重写接口中的三个方法:preHandle、postHandler、afterCompletion;

preHandle:此方法在进入controller之前执行,如果该方法返回ture,则程序继续向下执行处理器中的方法,否则程序将不再往下继续执行;

注意:会先按照顺序执行所有拦截器的preHandle方法,一直遇到return false为止,比如第二个preHandle方法是return false,则第三个以及以后所有拦截器都不会执行。若都是return true,则执行用户请求的url方法。

postHandler:此方法将在controller执行后执行;

afterCompletion:此方法在整个请求结束(请求结束,但是并未返回给客户端)之后执行;

2、将拦截器注入到配置类中(Config/WebMvcConfig.java)

配置拦截器,通过实现WebMvcConfigurer接口,重写addInterceptors方法,具体代码如下:

public class WebMvcConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(alphaInterceptor)
.excludePathPatterns(\"/**/*.css\", \"/**/*.js\", \"/**/*.png\", \"/**/*.jpg\", \"/**/*.jpeg\")
.addPathPatterns(\"/register\", \"/login\");}}

excludePathPatterns:表示不拦截的资源(这里主要是静态资源:图片,js、css也属于静态资源);

addPathPatterns:表示需要拦截的资源(即登录、注册)

拦截器执行流程:

1)单个拦截器执行流程:prehandle()—Handle(也就是控制器里的方法)—postHandle()—afterCompletion()。

2)多个拦截器执行流程:

preHandleA—preHandleC——Handle——postHandleC—postHandleA——afterCompletionC—afterCompletionA。

二、优化

项目中使用redis优化登录功能,怎么优化?

1、为什么需要使用Redis的原因?

1)使用Redis存储验证码kaptcha;

a.验证码需要频繁的访问与刷新,对性能要求比较高;

b.验证码不需要永久保存,通常在很短的时间后就会失效;

c.分布式部署时,存在Session共享问题。

Session 是保存在服务器的⽂件中,如果是集群服务,同⼀个⽤户过来可能落在不同机器上,这就会导致⽤户频繁登陆;采⽤ Redis 保存 Session 后,无论⽤户落在那台机器上都能够获取到对应的Session 信息。

2)使用Redis存储登录凭证ticket;

a.处理每次请求时,都需要查询用户的登录凭证,访问的频率非常高。

3)使用Redis缓存用户信息user。

a.处理每次请求时,都要根据凭证查询用户信息,访问的频率非常高。

2、为什么Redis速度快、性能好?

(1)数据存放在内存中:内存的读写速度比磁盘(数据库)快的多;

(2)数据结构简单,对数据操作也简单;

(3)采⽤单线程,没有多线程竞争锁的性能消耗,也没有多线程导致的切换而消耗CPU, 或者多线程死锁等问题;

(4)使⽤多路 I/O 复⽤模型(解决单线程速度慢的问题),⾮阻塞 IO。

3、之前基于Session的登录功能怎么使用Redis优化?

1)登录注册功能的验证码之前是存放在Session中,会增加服务端的内存压力,现在通过Cookie获取信息存储到Redis中,Redis的key存随机字符串,Value存生成的字符串;并且设置60s后自动清理;然后就从redis中获取验证码,赋值给kaptcha;

Key值的获取:

String kaptchaOwner = CommunityUtil.generateUUID();
String redisKey = RedisKeyUtil.getKaptchaKey(kaptchaOwner);

Key和Value值存储到Redis中:(其中text是value)

String text = kaptchaProducer.createText();
redisTemplate.opsForValue().set(redisKey, text,60, TimeUnit.SECONDS);

2)使用Redis存储登录凭证

String redisKey = RedisKeyUtil.getTicketKey(ticket.getTicket());     
redisTemplate.opsForValue().set(redisKey, ticket);        
map.put(\"ticket\", ticket.getTicket());

3)每次请求,根据登录凭证,查询用户信息

a.优先从缓冲中取值;

b.取不到时初始化缓冲数据(redis存值);

c.数据变更时清除缓存(删除redis的Key)

资源下载此资源下载价格为1小猪币,终身VIP免费,请先
由于本站资源来源于互联网,以研究交流为目的,所有仅供大家参考、学习,不存在任何商业目的与商业用途,如资源存在BUG以及其他任何问题,请自行解决,本站不提供技术服务! 由于资源为虚拟可复制性,下载后不予退积分和退款,谢谢您的支持!如遇到失效或错误的下载链接请联系客服QQ:442469558

:本文采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可, 转载请附上原文出处链接。
1、本站提供的源码不保证资源的完整性以及安全性,不附带任何技术服务!
2、本站提供的模板、软件工具等其他资源,均不包含技术服务,请大家谅解!
3、本站提供的资源仅供下载者参考学习,请勿用于任何商业用途,请24小时内删除!
4、如需商用,请购买正版,由于未及时购买正版发生的侵权行为,与本站无关。
5、本站部分资源存放于百度网盘或其他网盘中,请提前注册好百度网盘账号,下载安装百度网盘客户端或其他网盘客户端进行下载;
6、本站部分资源文件是经压缩后的,请下载后安装解压软件,推荐使用WinRAR和7-Zip解压软件。
7、如果本站提供的资源侵犯到了您的权益,请邮件联系: 442469558@qq.com 进行处理!

猪小侠源码-最新源码下载平台 Java教程 SpringMVC拦截器的实现和作用及Redis登陆功能的优化详解 http://www.20zxx.cn/705501/xuexijiaocheng/javajc.html

猪小侠源码,优质资源分享网

常见问题
  • 本站所有资源版权均属于原作者所有,均只能用于参考学习,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担
查看详情
  • 最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,建议提前注册好百度网盘账号,使用百度网盘客户端下载
查看详情

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务