最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringMVC攔截器的實(shí)現(xiàn)和作用及Redis登陸功能的優(yōu)化詳解

 更新時(shí)間:2022年09月19日 16:20:14   作者:π大星的日常  
這篇文章主要介紹了Java項(xiàng)目SpringMVC攔截器+Redis優(yōu)化登錄功能實(shí)現(xiàn)過程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧

一、分析

項(xiàng)目中添加Spring MVC攔截器,攔截器怎么實(shí)現(xiàn)的,它的作用是什么?

攔截器的作用:讓未登錄的用戶不能訪問某些頁面。 攔截器是在controller代碼執(zhí)行之前,根據(jù)用戶請求做出相應(yīng)的處理;

Spring Boot中的攔截器和Spring MVC中的一樣,流程是:

1、先定義一個(gè)攔截器類,并且這個(gè)類需要實(shí)現(xiàn)HandlerInterceptor接口,重寫接口中的三個(gè)方法:preHandle、postHandler、afterCompletion;

preHandle:此方法在進(jìn)入controller之前執(zhí)行,如果該方法返回ture,則程序繼續(xù)向下執(zhí)行處理器中的方法,否則程序?qū)⒉辉偻吕^續(xù)執(zhí)行;

注意:會先按照順序執(zhí)行所有攔截器的preHandle方法,一直遇到return false為止,比如第二個(gè)preHandle方法是return false,則第三個(gè)以及以后所有攔截器都不會執(zhí)行。若都是return true,則執(zhí)行用戶請求的url方法。

postHandler:此方法將在controller執(zhí)行后執(zhí)行;

afterCompletion:此方法在整個(gè)請求結(jié)束(請求結(jié)束,但是并未返回給客戶端)之后執(zhí)行;

2、將攔截器注入到配置類中(Config/WebMvcConfig.java)

配置攔截器,通過實(shí)現(xiàn)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:表示不攔截的資源(這里主要是靜態(tài)資源:圖片,js、css也屬于靜態(tài)資源);

addPathPatterns:表示需要攔截的資源(即登錄、注冊)

攔截器執(zhí)行流程:

1)單個(gè)攔截器執(zhí)行流程:prehandle()—Handle(也就是控制器里的方法)—postHandle()—afterCompletion()。

2)多個(gè)攔截器執(zhí)行流程:

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

二、優(yōu)化

項(xiàng)目中使用redis優(yōu)化登錄功能,怎么優(yōu)化?

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

1)使用Redis存儲驗(yàn)證碼kaptcha;

a.驗(yàn)證碼需要頻繁的訪問與刷新,對性能要求比較高;

b.驗(yàn)證碼不需要永久保存,通常在很短的時(shí)間后就會失效;

c.分布式部署時(shí),存在Session共享問題。

Session 是保存在服務(wù)器的?件中,如果是集群服務(wù),同?個(gè)?戶過來可能落在不同機(jī)器上,這就會導(dǎo)致?戶頻繁登陸;采? Redis 保存 Session 后,無論?戶落在那臺機(jī)器上都能夠獲取到對應(yīng)的Session 信息。

2)使用Redis存儲登錄憑證ticket;

a.處理每次請求時(shí),都需要查詢用戶的登錄憑證,訪問的頻率非常高。

3)使用Redis緩存用戶信息user。

a.處理每次請求時(shí),都要根據(jù)憑證查詢用戶信息,訪問的頻率非常高。

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

(1)數(shù)據(jù)存放在內(nèi)存中:內(nèi)存的讀寫速度比磁盤(數(shù)據(jù)庫)快的多;

(2)數(shù)據(jù)結(jié)構(gòu)簡單,對數(shù)據(jù)操作也簡單;

(3)采?單線程,沒有多線程競爭鎖的性能消耗,也沒有多線程導(dǎo)致的切換而消耗CPU, 或者多線程死鎖等問題;

(4)使?多路 I/O 復(fù)?模型(解決單線程速度慢的問題),?阻塞 IO。

3、之前基于Session的登錄功能怎么使用Redis優(yōu)化?

1)登錄注冊功能的驗(yàn)證碼之前是存放在Session中,會增加服務(wù)端的內(nèi)存壓力,現(xiàn)在通過Cookie獲取信息存儲到Redis中,Redis的key存隨機(jī)字符串,Value存生成的字符串;并且設(shè)置60s后自動清理;然后就從redis中獲取驗(yàn)證碼,賦值給kaptcha;

Key值的獲?。?/p>

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)每次請求,根據(jù)登錄憑證,查詢用戶信息

a.優(yōu)先從緩沖中取值;

b.取不到時(shí)初始化緩沖數(shù)據(jù)(redis存值);

c.數(shù)據(jù)變更時(shí)清除緩存(刪除redis的Key)

到此這篇關(guān)于SpringMVC攔截器的實(shí)現(xiàn)和作用及Redis登陸功能的優(yōu)化詳解的文章就介紹到這了,更多相關(guān)SpringMVC攔截器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java之路徑分隔符介紹

    java之路徑分隔符介紹

    考慮到程序的可移植性,創(chuàng)建文件時(shí)建議大家選用"/",因?yàn)榻?jīng)過測試用java創(chuàng)建文件時(shí)在windows平臺下用“/”也是可以的,java貌似在后臺作過處理了。
    2013-03-03
  • java數(shù)組基礎(chǔ)詳解

    java數(shù)組基礎(chǔ)詳解

    下面小編就為大家?guī)硪黄狫ava創(chuàng)建數(shù)組的幾種方式總結(jié)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧,希望能給大家?guī)韼椭?/div> 2021-06-06
  • java中構(gòu)造器內(nèi)部調(diào)用構(gòu)造器實(shí)例詳解

    java中構(gòu)造器內(nèi)部調(diào)用構(gòu)造器實(shí)例詳解

    在本篇文章里小編給大家分享的是關(guān)于java中構(gòu)造器內(nèi)部調(diào)用構(gòu)造器實(shí)例內(nèi)容,需要的朋友們可以學(xué)習(xí)下。
    2020-05-05
  • Java的SpringMVC中控制器返回XML數(shù)據(jù)問題

    Java的SpringMVC中控制器返回XML數(shù)據(jù)問題

    這篇文章主要介紹了Java的SpringMVC中控制器返回XML數(shù)據(jù)問題,控制器是處理HTTP請求的組件,它們接收來自客戶端的請求,并將其轉(zhuǎn)換為適當(dāng)?shù)捻憫?yīng),這些響應(yīng)可以是動態(tài)生成的?HTML?頁面,也可以是JSON或XML格式的數(shù)據(jù),需要的朋友可以參考下
    2023-07-07
  • JavaAPI的使用方法詳解

    JavaAPI的使用方法詳解

    這篇文章主要介紹了JavaAPI的使用方法詳解,還是比較不錯(cuò)的,這里分享給大家,供需要的朋友參考。
    2017-11-11
  • java實(shí)現(xiàn)圖片加水印效果

    java實(shí)現(xiàn)圖片加水印效果

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)圖片加水印效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • IDEA中HTML通過servlet3.0注解名提交表單到servlet類找不到頁面的問題

    IDEA中HTML通過servlet3.0注解名提交表單到servlet類找不到頁面的問題

    這篇文章主要介紹了IDEA中HTML通過servlet3.0注解名提交表單到servlet類找不到頁面的問題,本文通過場景描述及問題解析,給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • 詳解基于Spring Data的領(lǐng)域事件發(fā)布

    詳解基于Spring Data的領(lǐng)域事件發(fā)布

    這篇文章主要介紹了詳解基于Spring Data的領(lǐng)域事件發(fā)布,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • java利用Socket實(shí)現(xiàn)聊天室功能實(shí)例

    java利用Socket實(shí)現(xiàn)聊天室功能實(shí)例

    這篇文章主要介紹了java利用Socket實(shí)現(xiàn)聊天室功能實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-02-02
  • SpringBoot 策略模式實(shí)現(xiàn)切換上傳文件模式

    SpringBoot 策略模式實(shí)現(xiàn)切換上傳文件模式

    策略模式是指有一定行動內(nèi)容的相對穩(wěn)定的策略名稱,這篇文章主要介紹了SpringBoot 策略模式 切換上傳文件模式,需要的朋友可以參考下
    2023-11-11

最新評論

远安县| 夹江县| 黔西县| 灵璧县| 西平县| 潍坊市| 钟祥市| 海盐县| 望江县| 太原市| 台东市| 阿坝| 伊吾县| 华坪县| 扶绥县| 咸宁市| 射阳县| 台东市| 得荣县| 卫辉市| 克什克腾旗| 苗栗市| 柳江县| 嵊州市| 馆陶县| 平利县| 罗田县| 平乡县| 犍为县| 五寨县| 谷城县| 玛纳斯县| 贵州省| 同江市| 绥江县| 闽侯县| 巫山县| 彩票| 无棣县| 子洲县| 长春市|