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

 更新时间:2022年09月19日 16:20:14   作者:π大星的日常  
这篇文章主要介绍了Java项目SpringMVC拦截器+Redis优化登录功能实现过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

一、分析

项目中添加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)

到此这篇关于SpringMVC拦截器的实现和作用及Redis登陆功能的优化详解的文章就介绍到这了,更多相关SpringMVC拦截器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java之路径分隔符介绍

    java之路径分隔符介绍

    考虑到程序的可移植性,创建文件时建议大家选用"/",因为经过测试用java创建文件时在windows平台下用“/”也是可以的,java貌似在后台作过处理了。
    2013-03-03
  • java数组基础详解

    java数组基础详解

    下面小编就为大家带来一篇Java创建数组的几种方式总结。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能给大家带来帮助
    2021-06-06
  • java中构造器内部调用构造器实例详解

    java中构造器内部调用构造器实例详解

    在本篇文章里小编给大家分享的是关于java中构造器内部调用构造器实例内容,需要的朋友们可以学习下。
    2020-05-05
  • Java的SpringMVC中控制器返回XML数据问题

    Java的SpringMVC中控制器返回XML数据问题

    这篇文章主要介绍了Java的SpringMVC中控制器返回XML数据问题,控制器是处理HTTP请求的组件,它们接收来自客户端的请求,并将其转换为适当的响应,这些响应可以是动态生成的 HTML 页面,也可以是JSON或XML格式的数据,需要的朋友可以参考下
    2023-07-07
  • JavaAPI的使用方法详解

    JavaAPI的使用方法详解

    这篇文章主要介绍了JavaAPI的使用方法详解,还是比较不错的,这里分享给大家,供需要的朋友参考。
    2017-11-11
  • java实现图片加水印效果

    java实现图片加水印效果

    这篇文章主要为大家详细介绍了java实现图片加水印效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • IDEA中HTML通过servlet3.0注解名提交表单到servlet类找不到页面的问题

    IDEA中HTML通过servlet3.0注解名提交表单到servlet类找不到页面的问题

    这篇文章主要介绍了IDEA中HTML通过servlet3.0注解名提交表单到servlet类找不到页面的问题,本文通过场景描述及问题解析,给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • 详解基于Spring Data的领域事件发布

    详解基于Spring Data的领域事件发布

    这篇文章主要介绍了详解基于Spring Data的领域事件发布,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • java利用Socket实现聊天室功能实例

    java利用Socket实现聊天室功能实例

    这篇文章主要介绍了java利用Socket实现聊天室功能实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-02-02
  • SpringBoot 策略模式实现切换上传文件模式

    SpringBoot 策略模式实现切换上传文件模式

    策略模式是指有一定行动内容的相对稳定的策略名称,这篇文章主要介绍了SpringBoot 策略模式 切换上传文件模式,需要的朋友可以参考下
    2023-11-11

最新评论