亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java中的登錄技術保姆級詳細教程

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

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

1.登錄思路

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

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

2.登錄標記

1.會話技術

會話就是當瀏覽器打開訪問服務器資源的時候,就會建立會話,就類似與打電話,打通了就建立了會話,當瀏覽器關閉或服務器關閉的時候,會話結束,一次會話中可以包含多次請求和響應,就像電話打通后,一人一句(一句話就是一個請求或響應)。

2.會話跟蹤

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

1.Cookie技術

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

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

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

2.Session技術

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

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

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

3.令牌技術

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

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

JWT令牌技術

1.概念

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

2.JWT的生成與解析

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

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

其次可以通過Jwts的builder()方法構建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==";
    //定義密鑰過期時間
    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ù)。
                 */
                .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令牌返回給前端即可,下次請求攜帶令牌就可訪問對應的功能。

總結

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

相關文章

  • Java線程池的分析和使用詳解

    Java線程池的分析和使用詳解

    本篇文章主要介紹了Java線程池的分析和使用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-11-11
  • IDEA如何查看代碼反匯編代碼

    IDEA如何查看代碼反匯編代碼

    這篇文章主要介紹了IDEA如何查看代碼反匯編代碼問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 詳解Spring Boot的GenericApplicationContext使用教程

    詳解Spring Boot的GenericApplicationContext使用教程

    這篇教程展示了如何在Spring應用程序中使用GenericApplicationContext 。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • maven依賴傳遞和依賴沖突原理

    maven依賴傳遞和依賴沖突原理

    這篇文章主要介紹了maven依賴傳遞和依賴沖突原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • java如何實現(xiàn)post請求webservice服務端

    java如何實現(xiàn)post請求webservice服務端

    這篇文章主要介紹了java如何實現(xiàn)post請求webservice服務端,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • SpringBoot+Thymeleaf靜態(tài)資源的映射規(guī)則說明

    SpringBoot+Thymeleaf靜態(tài)資源的映射規(guī)則說明

    這篇文章主要介紹了SpringBoot+Thymeleaf靜態(tài)資源的映射規(guī)則說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java遠程調(diào)用組件Feign技術使用詳解

    Java遠程調(diào)用組件Feign技術使用詳解

    Feign是Netflix公司開發(fā)的一個聲明式的REST調(diào)用客戶端; Ribbon負載均衡、 Hystrⅸ服務熔斷是我們Spring Cloud中進行微服務開發(fā)非?;A的組件,在使用的過程中我們也發(fā)現(xiàn)它們一般都是同時出現(xiàn)的,而且配置也都非常相似
    2022-11-11
  • 解析ConcurrentHashMap: get、remove方法分析

    解析ConcurrentHashMap: get、remove方法分析

    ConcurrentHashMap是由Segment數(shù)組結構和HashEntry數(shù)組結構組成。Segment的結構和HashMap類似,是一種數(shù)組和鏈表結構,今天給大家普及java面試常見問題---ConcurrentHashMap知識,一起看看吧
    2021-06-06
  • Mybatis逆向工程時失敗問題及解決

    Mybatis逆向工程時失敗問題及解決

    這篇文章主要介紹了Mybatis逆向工程時失敗問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Java中的數(shù)組排序方式(快速排序、冒泡排序、選擇排序)

    Java中的數(shù)組排序方式(快速排序、冒泡排序、選擇排序)

    這篇文章主要介紹了Java中的數(shù)組排序方式(快速排序、冒泡排序、選擇排序),需要的朋友可以參考下
    2014-02-02

最新評論