国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

用戶登錄后IP記錄日志的六種實(shí)現(xiàn)方案探討

這篇具有很好參考價(jià)值的文章主要介紹了用戶登錄后IP記錄日志的六種實(shí)現(xiàn)方案探討。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

之前大群里有小伙伴在討論用戶IP日志記錄的一些方案,也有小伙伴在做這個(gè)需求,私底下跟我咨詢過,所以在此特地匯總梳理一下。

### 方案1
在登錄業(yè)務(wù)中直接記錄用戶每次登錄的IP日志,如下圖所示:

后臺記錄當(dāng)前登錄的ip 如何實(shí)現(xiàn),tcp/ip,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

用戶請求登錄的Controller,原先用戶直接調(diào)用登錄的service,這里假設(shè)用戶登錄校驗(yàn)都沒問題,這個(gè)時(shí)候新增一個(gè)業(yè)務(wù)方法用于保存用戶的ip,這個(gè)ip需要通過Controller的方法獲得請求參數(shù)Request的IP后傳入到Service,如此就可以保存。這里的數(shù)據(jù)庫可以用MySql這樣的關(guān)系型數(shù)據(jù)庫,也可以使用MongoDB,個(gè)人建議后者。

這種方案簡單粗暴,但是有個(gè)缺點(diǎn),就是耦合太高了。對原先的代碼有了侵入性,Controller與Service的方法都需要進(jìn)行修改后方可生效。

### 方案2

為了降低耦合,使用消息隊(duì)列,消息隊(duì)列可以在controller中發(fā)、也可以在service中發(fā),如下圖所示

后臺記錄當(dāng)前登錄的ip 如何實(shí)現(xiàn),tcp/ip,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

如果不考慮事務(wù),并且不修改service的情況下,可以直接在controller中發(fā)消息即可。消費(fèi)監(jiān)聽到消息后,調(diào)用service的保存ip方法即可。

使用消息隊(duì)列方案也有一個(gè)很大的缺點(diǎn),那就是太重了,很多公司一開始可能并沒有消息隊(duì)列,額外增加MQ也會提高運(yùn)維的復(fù)雜度。所以這個(gè)方案看情況而定,沒有必要為了一個(gè)非主線任務(wù)而增加中間件。

### 方案3
同樣是解耦,由于MQ太重,所以可以采用Spring的異步任務(wù)來做。如下圖所示:

后臺記錄當(dāng)前登錄的ip 如何實(shí)現(xiàn),tcp/ip,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

此處也不考慮事務(wù),因?yàn)闆]必要,直接在Controller中調(diào)用異步任務(wù)就可以。通過在異步任務(wù)中進(jìn)行IP保存。

這么做其實(shí)沒啥問題,但是有的公司的技術(shù)Leader或架構(gòu)師不喜歡這種方式,因?yàn)檫@仍然對原有代碼進(jìn)行了破壞,也就是Controller需要修改代碼,也依然會存在一定的耦合度。所以請看方案4。

### 方案4
使用Spring的AOP切面,如下圖所示:

后臺記錄當(dāng)前登錄的ip 如何實(shí)現(xiàn),tcp/ip,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

通過AOP,可以直接針對某個(gè)指定的方法進(jìn)行切入,結(jié)合AOP的多種通知機(jī)制來做,如此針對性的方法可以在AOP中實(shí)現(xiàn),只要切到登錄業(yè)務(wù)方法,那么就會進(jìn)入AOP的通知,在通知中調(diào)用IP業(yè)務(wù)進(jìn)記錄保存即可。

使用AOP切面也會存在小缺點(diǎn),從長遠(yuǎn)考慮,Service中的方法小概率被其他業(yè)務(wù)或其他子項(xiàng)目調(diào)用,如此便會生成不必要的日志。短期的話AOP簡單方便可以直接用,也降低代碼的耦合,對原有業(yè)務(wù)代碼零侵入。

### 方案5
使用攔截器(有些框架叫做過濾器),本質(zhì)上這也類似于切面,只不過這是針對請求的入口,在進(jìn)入到controller之前進(jìn)行IP數(shù)據(jù)的獲取與記錄。也許有小伙伴會問,AOP也可以直接切controller呀,直接用AOP也行吧?沒錯(cuò),但是習(xí)慣性不這么做,AOP一般對service的切入較多。相對而言,使用攔截器則更佳。參考如下圖所示:

后臺記錄當(dāng)前登錄的ip 如何實(shí)現(xiàn),tcp/ip,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

通過攔截器注冊,指定分配給某個(gè)url的路由(如:/user/login)即可。如此每次請求經(jīng)過該路由,則進(jìn)入攔截器中,通過ip的獲得并且調(diào)用IpService進(jìn)行記錄保存即可。

本方案相對可以實(shí)現(xiàn),并且有的小伙伴也在這么用。所以如果在Java后端代碼中實(shí)現(xiàn)的話,比較推薦方案5。當(dāng)然處理方案5之外,還有一個(gè)比較好的方式,請參看方案6。

### 方案6
網(wǎng)關(guān)記錄用戶登錄的IP日志。方案1~5都需要經(jīng)過java代碼的編寫,并且重新打包發(fā)布版本,而且開發(fā)和運(yùn)維還都需要走流程走工單。那么假設(shè)技術(shù)經(jīng)理提出不從java代碼層面來做的話,這個(gè)時(shí)候其實(shí)也可以。請參看如下圖所示:

后臺記錄當(dāng)前登錄的ip 如何實(shí)現(xiàn),tcp/ip,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

OpenResty目前在很多公司都是作為業(yè)務(wù)網(wǎng)關(guān)來使用,而且在高并發(fā)場景中出現(xiàn)的很多,幾乎都在用,比如多級緩存架構(gòu)都需要借助于OpenResty來實(shí)現(xiàn)。在圖中,OpenResty可以作為業(yè)務(wù)網(wǎng)關(guān)來控制請求的走向,請求進(jìn)來如果匹配到登錄url(如:/user/login),則進(jìn)行l(wèi)ua腳本的轉(zhuǎn)發(fā),請求會進(jìn)入到lua腳本中進(jìn)行控制,lua腳本可以獲得用戶的ip以及用戶id,如此就可以直接在lua中進(jìn)行數(shù)據(jù)的存儲,不管是mysql、mongodb或是redis,都可以進(jìn)行存取。此處可以直接結(jié)合mongodb來進(jìn)行日志記錄的保存即可。

可以看到,本方案只需要修改網(wǎng)關(guān)增加lua腳本即可生效,對后端的Java代碼是0侵入的,并且也降低業(yè)務(wù)代碼的復(fù)雜度。當(dāng)然缺點(diǎn)也有,那就是需要和運(yùn)維人員協(xié)調(diào),讓運(yùn)維來進(jìn)行網(wǎng)關(guān)的業(yè)務(wù)編寫。當(dāng)然有些公司是由Java開發(fā)來實(shí)現(xiàn)OpenResty的相關(guān)代碼,那么這樣就更方便了,減少溝通成本。

「Java架構(gòu)師2.0」正在籌備中...文章來源地址http://www.zghlxwxcb.cn/news/detail-796505.html

到了這里,關(guān)于用戶登錄后IP記錄日志的六種實(shí)現(xiàn)方案探討的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • C語言實(shí)現(xiàn)排序算法的六種方式

    1、冒泡法 2、交換法 每次用當(dāng)前的元素一一的同其后的元素 3、選擇法 從數(shù)據(jù)中選擇最小的同第一個(gè)值交換,在從剩下的部分中選擇最小的與第二個(gè)交換,這樣往復(fù)下去 4、插入法 在前面的數(shù)中尋找相應(yīng)的位置插入, 然后繼續(xù)下一張 插入排序就是每一步都將一個(gè)待排數(shù)據(jù)按

    2024年01月25日
    瀏覽(19)
  • mysql實(shí)現(xiàn)if語句判斷功能的六種使用形式

    在Mysql數(shù)據(jù)庫中實(shí)現(xiàn)判斷功能有很多方式,具體又分為函數(shù)和if語句形式,函數(shù)的好處是可以作為sql的一部分來運(yùn)行,而if語句則需要在存儲過程中使用。 語法: 解釋: 判斷第一個(gè)表達(dá)式是否為 NULL,如果為 NULL 則返回第二個(gè)參數(shù)的值,如果不為 NULL 則返回第一個(gè)參數(shù)的值 參

    2024年02月15日
    瀏覽(44)
  • Java面試之單例模式的六種實(shí)現(xiàn)方式

    提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 由于設(shè)計(jì)模式在面向?qū)ο笾衅鹬e足輕重的作用,在面試中很多公司都喜歡問一下有關(guān)設(shè)計(jì)模式的問題。在常用的設(shè)計(jì)模式中,Singleton單例模式是唯一一個(gè)能用短短幾十行代碼完整實(shí)現(xiàn)的模式,因此,寫

    2024年02月10日
    瀏覽(21)
  • 實(shí)現(xiàn)用戶操作日志記錄

    實(shí)現(xiàn)用戶操作日志記錄

    java自帶的日志框架是java.util.logging(JUL),從JDK1.4(2002)開始捆綁在JDK中??梢允褂肑UL來記錄操作日志。以下是使用JUL記錄事務(wù)的示例: 系統(tǒng)日志 :統(tǒng)日志主要是為開發(fā)排查問題提供依據(jù),一般打印在日志文件中;系統(tǒng)日志的可讀性要求沒那么高,日志中會包含代碼的信息

    2024年02月15日
    瀏覽(19)
  • Bean 的六種作用域

    Bean 的六種作用域

    ? 目錄 一、作用域是什么? 1、singleton(單例作用域) 2、prototype(原型作用域) 3、request(請求作用域) 4、session(回話作用域) 5、application(全局作用域) 6、websocket( HTTP WebSocket 作用域) 二、單例作?域VS 全局作?域 三、設(shè)置作用域 Bean的作用域是指Bean實(shí)例的生命周

    2024年02月10日
    瀏覽(32)
  • 關(guān)于Bean的六種作用域

    在JavaSE中,我們學(xué)習(xí)過了全局變量以及局部變量,這里就涉及到了作用域問題,那么什么是作用域呢? 限定程序中變量的使用范圍叫做作用域,或者說在源代碼中定義變量的某個(gè)區(qū)域就叫做作用域。 而Bean的作用域指的是 Bean在Spring整個(gè)框架中的某種行為模式 , 比如singleto

    2024年02月08日
    瀏覽(26)
  • 服務(wù)限流的六種方式

    服務(wù)限流,是指通過控制請求的速率或次數(shù)來達(dá)到保護(hù)服務(wù)的目的,在微服務(wù)中,我們通常會將它和熔斷、降級搭配在一起使用,來避免瞬時(shí)的大量請求對系統(tǒng)造成負(fù)荷,來達(dá)到保護(hù)服務(wù)平穩(wěn)運(yùn)行的目的。下面就來看一看常見的6種限流方式,以及它們的實(shí)現(xiàn)與使用。 固定窗

    2024年02月10日
    瀏覽(22)
  • Python中的六種基本數(shù)據(jù)類型

    Python中分為六種基本數(shù)據(jù)類型 不可變類型(又叫靜態(tài)數(shù)據(jù)類型,沒有增刪改操作):數(shù)字(number)、字符串(string)、元組(tuple) 可變類型(又叫動態(tài)數(shù)據(jù)類型,支持增刪改操作):列表(list)、字典(dictionary)、集合(set) 1. 數(shù)字類型(numbers): 數(shù)字類型下還可分為整數(shù)(int)、浮點(diǎn)數(shù)(f

    2024年02月04日
    瀏覽(25)
  • 【SpringMVC]獲取參數(shù)的六種方式

    【SpringMVC]獲取參數(shù)的六種方式

    目錄 1.通過ServletAPI獲取 2.通過控制器方法的形參獲取 3.@RequestParam:將請求參數(shù)和控制器方法的形參綁定 4.@RequestHeader:將請求頭信息與控制器方法的形參的值進(jìn)行綁定 5. CookieValue:將cookie數(shù)據(jù)和控制器方法的形參綁定 Cookie: ?編輯 6.通過控制器方法的實(shí)體類類型的形參獲取

    2024年02月09日
    瀏覽(20)
  • 斐波那契數(shù)列的六種解法

    做這個(gè)問題之前,我們需要了解到斐波那契數(shù)列是什么東西?是干什么的? 斐波那契數(shù)列是什么? 一、斐波那契數(shù)列指的是這樣一個(gè)數(shù)列:1、1、2、3、5、8、13、21、…… 這個(gè)數(shù)列從第三項(xiàng)開始,每一項(xiàng)都等于前兩項(xiàng)之和。 二、應(yīng)用:通常在個(gè)別股票中不是太準(zhǔn)確,通常在指數(shù)上

    2024年02月08日
    瀏覽(34)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包