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

Java中的登錄技術(shù)保姆級詳細(xì)教程

 更新時(shí)間:2025年06月06日 11:18:20   作者:小白碼磚  
這篇文章主要介紹了Java中登錄技術(shù)保姆級詳細(xì)教程的相關(guān)資料,在Java中我們可以使用各種技術(shù)和框架來實(shí)現(xiàn)這些功能,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

登錄是每個(gè)項(xiàng)目中必不可少的一個(gè)環(huán)節(jié),也是十分重要的環(huán)節(jié),這篇文章將探討關(guān)于登錄的一些技術(shù)。

1.登錄思路

在講解登錄技術(shù)之前,先來看一下登錄校驗(yàn)的思路,前端發(fā)起請求,請求到底web服務(wù)器后,服務(wù)器會(huì)對請求進(jìn)行解析,符合要求,將數(shù)據(jù)響應(yīng)給瀏覽器。如下圖所示:

由于前端發(fā)送的請求是基于HTTP協(xié)議的,是無狀態(tài)的一種協(xié)議,無狀態(tài)協(xié)議就是最后一次請求不會(huì)攜帶前一次請求數(shù)據(jù)的狀態(tài),因此需要后端進(jìn)行數(shù)據(jù)的校驗(yàn)。因此當(dāng)瀏覽器發(fā)送請求給Web服務(wù)器的時(shí)候,此時(shí)后端會(huì)通過攔截器,統(tǒng)一將前端發(fā)送的請求攔截下來,然后判斷請求是否有登錄標(biāo)記,請求中存入了登錄標(biāo)記,證明登錄過,則將對應(yīng)的請求放行訪問對應(yīng)的功能,反之沒有登陸過,則響應(yīng)對應(yīng)信息給瀏覽器,讓用戶重新登錄即可。

2.登錄標(biāo)記

1.會(huì)話技術(shù)

會(huì)話就是當(dāng)瀏覽器打開訪問服務(wù)器資源的時(shí)候,就會(huì)建立會(huì)話,就類似與打電話,打通了就建立了會(huì)話,當(dāng)瀏覽器關(guān)閉或服務(wù)器關(guān)閉的時(shí)候,會(huì)話結(jié)束,一次會(huì)話中可以包含多次請求和響應(yīng),就像電話打通后,一人一句(一句話就是一個(gè)請求或響應(yīng))。

2.會(huì)話跟蹤

有了會(huì)話后,需要保證會(huì)話中的多次請求或響應(yīng)是來自同一個(gè)會(huì)話,即瀏覽器需要識別多次請求是否來自同一個(gè)瀏覽器,因此需要進(jìn)行會(huì)話跟蹤,就像登錄的時(shí)候輸入驗(yàn)證信息,獲取驗(yàn)證碼是一次請求,然后登錄是一次請求,登錄的時(shí)候校驗(yàn)驗(yàn)證碼是一次請求,從而實(shí)現(xiàn)同一次會(huì)話出現(xiàn)多次請求,所以需要會(huì)話跟蹤保證多次請求是一次會(huì)話中產(chǎn)生的,會(huì)話跟蹤技術(shù)有客戶端會(huì)話跟蹤技術(shù)--Cookie,服務(wù)端會(huì)話跟蹤技術(shù)---Session,以及令牌技術(shù)--JWT。

1.Cookie技術(shù)

Cookie技術(shù)即當(dāng)瀏覽器第一次發(fā)送請求到服務(wù)器后,如果登錄成功了,服務(wù)器會(huì)創(chuàng)建Cookie對象,將共享的數(shù)據(jù)放里面,向?yàn)g覽器響應(yīng)數(shù)據(jù)的時(shí)候,會(huì)將數(shù)據(jù)放到響應(yīng)頭中返回給前端,前端會(huì)將Cookie對象保存到瀏覽器本地中,下一次發(fā)送請求的時(shí)候,會(huì)將Cookie添加到請求頭中,從而通過請求傳遞給服務(wù)器,服務(wù)器下一次請求后,回去解析請求判斷Cookie是否存在,從而實(shí)現(xiàn)會(huì)話跟蹤。如圖所示:

任何技術(shù)都有利有弊,Cookie也不例外,Cookie技術(shù)的優(yōu)點(diǎn)在于是HTTP協(xié)議所支持的技術(shù),缺點(diǎn)就是1.移動(dòng)端APP無法使用Cookie,2.其次就是不安全,用戶可以自己禁用Cookie,3.Cookie不支持跨域。如圖所示:

跨域指的是,協(xié)議一致,域名不一致。當(dāng)前端發(fā)送登錄請求給服務(wù)器的時(shí)候,服務(wù)器的地址和前端發(fā)送的地址不在同一個(gè)域名里面就會(huì)出現(xiàn)跨域問題,此時(shí)Cookie就會(huì)失敗。

2.Session技術(shù)

Session技術(shù)是基于Cookie技術(shù)實(shí)現(xiàn)的,瀏覽器第一次發(fā)送請求,服務(wù)器會(huì)創(chuàng)建會(huì)話對象Session,向?yàn)g覽器響應(yīng)數(shù)據(jù)的時(shí)候,會(huì)將Session的唯一標(biāo)識Id,添加到響應(yīng)頭中去,瀏覽器獲取到響應(yīng)請求后,會(huì)將Session的Id保存下來,下一次請求的時(shí)候,會(huì)將Id添加到請求頭中,然后服務(wù)器獲取到請求后,再去判斷請求頭中的Session的Id是否存在,從而實(shí)現(xiàn)會(huì)話跟蹤。

Session技術(shù)優(yōu)點(diǎn)在于Session是存放在服務(wù)器端的,安全性高,缺點(diǎn)在于服務(wù)器在集群環(huán)境下無法直接使用Session,還是就是包括了Cookie的所有缺點(diǎn)。

在集群環(huán)境下,無法直接使用Session原因在于,前端項(xiàng)目部署在Nginx上,Nginx將請求代理到后端服務(wù)器上面的時(shí)候,存在負(fù)載均衡,因此當(dāng)?shù)谝淮蔚卿浀臅r(shí)候,Session存放在第一個(gè)服務(wù)器中,第二次登錄的時(shí)候,通過負(fù)載均衡,可能會(huì)交給第二個(gè)服務(wù)器進(jìn)行處理,但是第二個(gè)服務(wù)器還沒有Session的id,此時(shí)就會(huì)重新創(chuàng)建一個(gè)新的id并覆蓋原來的id,那么后續(xù)請求由交給第一個(gè)服務(wù)器處理,就會(huì)發(fā)現(xiàn)id對不上,因此這樣就達(dá)不到會(huì)話跟蹤,這就是集群環(huán)境下無法直接使用Session。

3.令牌技術(shù)

令牌技術(shù)即瀏覽器第一次發(fā)送請求的時(shí)候,服務(wù)器會(huì)給數(shù)據(jù)發(fā)一個(gè)令牌,下一次請求的時(shí)候,會(huì)攜帶令牌,服務(wù)器對令牌進(jìn)行校驗(yàn),判斷是否過期,沒有過期則放行訪問對應(yīng)的功能,反之重新登錄獲取令牌。如圖所示:

令牌技術(shù)的優(yōu)點(diǎn)在于可以支持PC端,移動(dòng)端,其次可以解決集群環(huán)境下的認(rèn)證問題,可以減輕服務(wù)器端存儲的壓力。

JWT令牌技術(shù)

1.概念

JWT全稱JSON Web Token(JSON Web Tokens - jwt.io)定義了一種簡潔的,自包含的格式,用于在通信雙方以JSON數(shù)據(jù)格式安全的傳輸信息。JWT由三部分組成,第一部分:(Header頭),主要記錄令牌類型、簽名算法等,例如:{"alg":"HS256","type":"JWT"}。第二部分:Payload(有效載荷),主要攜帶一些自定義信息,默認(rèn)信息等,例如:{"id":"1","username":"Tom"}。第三部分:Signature(簽名),主要是用于防止Token被篡改,確保安全性。將header,payload融入,并加入指定的秘鑰,通過指定簽名算法計(jì)算而來。JWT每個(gè)部分都是JSON格式。如圖所示:

2.JWT的生成與解析

首先需要引入JWT所需要的jjwt依賴。

<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt</artifactId>
    <version>0.9.1</version>
</dependency>

其次可以通過Jwts的builder()方法構(gòu)建JWT令牌,通過Jwts的parser()方法解析JWT令牌。如下所示,是我創(chuàng)建的JWT工具類,包括了生成JWT和解析JWT兩部功能。

package com.itheima.utils;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
import java.util.Map;
/**
 * @author Allen
 * @version 1.0
 * JWT令牌工具類
 */
public class JwtUtil {
    //定義密鑰---秘鑰隨意定義即可
    private static final String SECRET_KEY="OTkwMTAyOQ==";
    //定義密鑰過期時(shí)間
    private static final long EXPIRATION_TIME=12*60*60*1000;

    //生成JWT令牌
    public static String generateJWT(Map<String, Object> claims){
        String Jwt = Jwts.builder()
                /**
                * 參數(shù)一:簽名算法,參數(shù)二:密鑰
                */
                .signWith(SignatureAlgorithm.HS256, SECRET_KEY)
                /**
                 * 參數(shù):Map集合,存放自定義的信息,一般是id,用戶名
                 */
                .addClaims(claims)
                /**
                 * 參數(shù):傳入JWT有效的時(shí)間-----在當(dāng)前的時(shí)間上外后加設(shè)定的時(shí)間,因此需要獲取當(dāng)前的時(shí)間毫秒數(shù)。
                 */
                .setExpiration(new Date(EXPIRATION_TIME+System.currentTimeMillis()))
                /**
                 *通過此方法生成JWT
                 */
                .compact();
        return Jwt;
    }
    /**
     *解析JWT
     * 參數(shù):獲取生成的JWT令牌
     */
    public static Claims parseJWT(String token){
        Claims JWT = Jwts.parser()
                /**
                 * 參數(shù):生成的密鑰
                */
                .setSigningKey(SECRET_KEY)
                /**
                 * 生成的JWT
                 */
                .parseClaimsJws(token)
                /**
                 * 通過此方法解析JWT
                 */
                .getBody();
        return JWT;
    }
}

用戶登錄成功后,調(diào)用工具類里面的生成JWT方法,將用戶的信息封裝到Map集合中傳入,即可生成JWT令牌,將JWT令牌返回給前端即可,下次請求攜帶令牌就可訪問對應(yīng)的功能。

總結(jié)

到此這篇關(guān)于Java中的登錄技術(shù)的文章就介紹到這了,更多相關(guān)Java登錄技術(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中類的定義與實(shí)例化詳解

    Java中類的定義與實(shí)例化詳解

    這篇文章主要給大家介紹了關(guān)于Java中類的定義與實(shí)例化的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Java?Web實(shí)現(xiàn)簡易圖書管理系統(tǒng)

    Java?Web實(shí)現(xiàn)簡易圖書管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Java?Web實(shí)現(xiàn)簡易圖書管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • 使用Spring Data JPA的坑點(diǎn)記錄總結(jié)

    使用Spring Data JPA的坑點(diǎn)記錄總結(jié)

    這篇文章主要給大家總結(jié)介紹了關(guān)于使用Spring Data JPA的一些坑點(diǎn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • Java集合框架之WeakHashMap詳解

    Java集合框架之WeakHashMap詳解

    這篇文章主要介紹了Java集合框架之WeakHashMap詳解,在 WeakHashMap 中,當(dāng)某個(gè)鍵不再正常使用時(shí),會(huì)被從WeakHashMap中被自動(dòng)移除,更精確地說,對于一個(gè)給定的鍵,其映射的存在并不阻止垃圾回收器對該鍵的丟棄,這就使該鍵成為可終止的,需要的朋友可以參考下
    2023-09-09
  • idea修改只讀/可寫狀態(tài)全過程

    idea修改只讀/可寫狀態(tài)全過程

    本文記錄了解決IntelliJ IDEA(打開文件只讀問題的過程,在設(shè)置中找到Editor下的Reader Mode,取消勾選選第一個(gè)可選框即可解決問題,同時(shí)提到該選項(xiàng)看起來很好看,本文僅供參考,希望能對讀者有所幫助
    2026-05-05
  • Java中的Gradle與Groovy的區(qū)別及存在的關(guān)系

    Java中的Gradle與Groovy的區(qū)別及存在的關(guān)系

    這篇文章主要介紹了Java中的Gradle與Groovy的區(qū)別及存在的關(guān)系,Groovy是一種JVM語言,它可以編譯為與Java相同的字節(jié)碼,并且可以與Java類無縫地互操作,Gradle是Java項(xiàng)目中主要的構(gòu)建系統(tǒng)之一,下文關(guān)于兩者的詳細(xì)內(nèi)容,需要的小伙伴可以參考一下
    2022-02-02
  • java中volatile關(guān)鍵字的作用與實(shí)例代碼

    java中volatile關(guān)鍵字的作用與實(shí)例代碼

    這篇文章主要給大家介紹了關(guān)于java中volatile關(guān)鍵字的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • 高可用架構(gòu)etcd選主故障主備秒級切換實(shí)現(xiàn)

    高可用架構(gòu)etcd選主故障主備秒級切換實(shí)現(xiàn)

    這篇文章主要為大家介紹了高可用架構(gòu)etcd選主故障主備秒級切換的實(shí)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-02-02
  • Mybatis plus Dynamic Datasource 動(dòng)態(tài)數(shù)據(jù)源及使用方式

    Mybatis plus Dynamic Datasource 動(dòng)態(tài)數(shù)據(jù)源及使用

    dynamic-datasource-spring-boot-starter是一個(gè)基于springboot的快速集成多數(shù)據(jù)源的啟動(dòng)器,它跟mybatis-plus是一個(gè)生態(tài)圈里的,很容易集成mybatis-plus,本文介紹Mybatis plus Dynamic Datasource 動(dòng)態(tài)數(shù)據(jù)源的相關(guān)知識,感興趣的朋友一起看看吧
    2025-09-09
  • 實(shí)例講解Java處理PDF圖章的方法

    實(shí)例講解Java處理PDF圖章的方法

    在本篇文章里小編給大家分享了關(guān)于Java處理PDF圖章的方法,對此有需要的朋友們可以學(xué)習(xí)下。
    2019-02-02

最新評論

亚东县| 宝应县| 漳浦县| 怀仁县| 大洼县| 通渭县| 通河县| 海林市| 鄂托克前旗| 武山县| 天长市| 庆安县| 曲阳县| 毕节市| 高阳县| 江孜县| 逊克县| 广南县| 金川县| 庆元县| 安溪县| 商河县| 收藏| 沙湾县| 漯河市| 阿尔山市| 杨浦区| 恩施市| 交城县| 萍乡市| 长沙县| 澜沧| 新化县| 福贡县| 曲靖市| 泽州县| 雷山县| 松溪县| 南溪县| 六枝特区| 丰原市|