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

登錄校驗(yàn)-Filter-登錄校驗(yàn)過濾器

這篇具有很好參考價(jià)值的文章主要介紹了登錄校驗(yàn)-Filter-登錄校驗(yàn)過濾器。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

思路

登錄校驗(yàn)Filter-流程

步驟

流程圖

登錄校驗(yàn)Filter-代碼

過濾器類

工具類

測(cè)試登錄

登錄接口功能請(qǐng)求

其他接口功能請(qǐng)求

前后端聯(lián)調(diào)?


思路

  • 前端訪問登錄接口,登陸成功后,服務(wù)端會(huì)生成一個(gè)JWT令牌,并返回給前端,前端會(huì)將JWT令牌保存下來,在同一會(huì)話中共享JWT令牌信息,在訪問其他功能接口時(shí),前端會(huì)在請(qǐng)求頭信息中存放JWT令牌信息,請(qǐng)求頭的名稱為token,過濾器Filter對(duì)請(qǐng)求實(shí)施統(tǒng)一攔截(登錄請(qǐng)求不進(jìn)行攔截,因?yàn)榈卿洺晒χ蟛艜?huì)生成JWT令牌)并進(jìn)行登錄校驗(yàn),如果JWT令牌存在并有效,F(xiàn)ilter就會(huì)放行請(qǐng)求訪問Web資源,否則返回錯(cuò)誤信息。

登錄校驗(yàn)Filter-流程

步驟

  • 獲取URL
  • 判斷請(qǐng)求中是否含有l(wèi)ogin,如果含有,說明是登錄操作,放行
  • 獲取請(qǐng)求頭中令牌(token)信息
  • 判斷令牌是否存在,如果不存在,返回錯(cuò)誤結(jié)果(未登錄)。
  • 解析token,如果解析失敗,返回錯(cuò)誤結(jié)果(未登錄)
  • 放行

流程圖

  • 登錄校驗(yàn)-Filter-登錄校驗(yàn)過濾器,Java Web學(xué)習(xí)跟蹤筆記,狀態(tài)模式,java,Filter,JWT令牌、

登錄校驗(yàn)Filter-代碼

過濾器類

  • package com.example.tlias.Filter;
    
    import com.alibaba.fastjson.JSONObject;
    import com.example.tlias.pojo.Result;
    import com.example.tlias.utils.JwtUtils;
    import jakarta.servlet.*;
    import jakarta.servlet.annotation.WebFilter;
    import jakarta.servlet.http.HttpServletRequest;
    import jakarta.servlet.http.HttpServletResponse;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.util.StringUtils;
    
    import java.io.IOException;
    
    @Slf4j
    @WebFilter(urlPatterns = "/*")
    public class LoginCheckFilter implements Filter {
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
            HttpServletRequest request = (HttpServletRequest) servletRequest;
            HttpServletResponse response = (HttpServletResponse) servletResponse;
            // 1.獲取請(qǐng)求URL地址
            String url = request.getRequestURI().toString();
            log.info("獲取到的URL地址為:{}", url);
    
            // 2.判斷URL是否含有l(wèi)ogin路徑,如果含有,則為登陸操作,放行
            if (url.contains("login")) {
                log.info("此請(qǐng)求為登陸操作,放行.......");
                filterChain.doFilter(request, response);
                return; //  todo 跳出過濾器
            }
            // todo 以下是對(duì)于不是登錄操作的過濾
            // 3.獲取請(qǐng)求頭中的令牌(token)
            String token = request.getHeader("token");
    
            // 4.判斷是否存在,如果不存在,返回錯(cuò)誤結(jié)果(未登錄)
            if (!StringUtils.hasLength(token)) {
                log.info("請(qǐng)求頭token為空,返回為登錄的信息");
                Result error = Result.error("NOT_LOGIN"); // 返回的錯(cuò)誤信息通過接口文檔與前端統(tǒng)一
                // todo 手動(dòng)轉(zhuǎn)換 將對(duì)象-->json格式數(shù)據(jù)===》可以使用阿里巴巴fastJson的工具包,在pom.xml配置文件中添加相關(guān)依賴
                // todo 控制類返回的對(duì)象會(huì)自動(dòng)轉(zhuǎn)換為JSON格式的字符串?dāng)?shù)據(jù)
                String noLogin = JSONObject.toJSONString(error);
                // 將數(shù)據(jù)寫入響應(yīng)對(duì)象
                response.getWriter().write(noLogin);
                return; // todo 跳出過濾器
            }
    
            // 5.解析token,如果解析失敗,返回錯(cuò)誤結(jié)果(未登錄)
            try {
                JwtUtils.parseJWT(token);  // todo 如果解析失敗方法就會(huì)報(bào)錯(cuò)
            } catch (Exception e) {  // token解析失敗
                e.printStackTrace();
                log.info("解析令牌失敗,返回未登錄的錯(cuò)誤信息");
                Result error = Result.error("NOT_LOGIN");
                String noLogin = JSONObject.toJSONString(error);
                response.getWriter().write(noLogin);
                return;
            }
            // 6.放行
            log.info("令牌合法,放行");
            filterChain.doFilter(request, response);
        }
    }
    

工具類

  • package com.example.tlias.utils;
    
    import io.jsonwebtoken.Claims;
    import io.jsonwebtoken.Jwts;
    import io.jsonwebtoken.SignatureAlgorithm;
    
    import java.util.Date;
    import java.util.Map;
    
    public class JwtUtils {
    
        private static String signKey = "itheima"; // 設(shè)置簽名密鑰
        private static Long expire = 43200000L; // 設(shè)置過期時(shí)間
    
        /**
         * 生成JWT令牌
         *
         * @param claims JWT第二部分負(fù)載 payload 中存儲(chǔ)的內(nèi)容
         * @return
         */
        public static String generateJwt(Map<String, Object> claims) {
            String jwt = Jwts.builder()
                    .addClaims(claims)
                    .signWith(SignatureAlgorithm.HS256, signKey)
                    .setExpiration(new Date(System.currentTimeMillis() + expire))
                    .compact();
            return jwt;
        }
    
        /**
         * 解析JWT令牌
         *
         * @param jwt JWT令牌
         * @return JWT第二部分負(fù)載 payload 中存儲(chǔ)的內(nèi)容
         */
        public static Claims parseJWT(String jwt) {
            Claims claims = Jwts.parser()
                    .setSigningKey(signKey)
                    .parseClaimsJws(jwt)
                    .getBody();
            return claims;
        }
    }
    

測(cè)試登錄

  • 使用postman發(fā)送請(qǐng)求
    • 登錄接口功能請(qǐng)求
      • 登陸成功(返回登錄成功信息及令牌信息)
        • 登錄校驗(yàn)-Filter-登錄校驗(yàn)過濾器,Java Web學(xué)習(xí)跟蹤筆記,狀態(tài)模式,java,Filter,JWT令牌、
      • 登陸失?。ǚ祷氐卿浭⌒畔ⅲ?/p>

        • 登錄校驗(yàn)-Filter-登錄校驗(yàn)過濾器,Java Web學(xué)習(xí)跟蹤筆記,狀態(tài)模式,java,Filter,JWT令牌、

    • 其他接口功能請(qǐng)求
      • 未登陸成功訪問其他接口功能

        • 登錄校驗(yàn)-Filter-登錄校驗(yàn)過濾器,Java Web學(xué)習(xí)跟蹤筆記,狀態(tài)模式,java,Filter,JWT令牌、????

      • 登陸成功訪問其他接口
        • 登錄校驗(yàn)-Filter-登錄校驗(yàn)過濾器,Java Web學(xué)習(xí)跟蹤筆記,狀態(tài)模式,java,Filter,JWT令牌、

前后端聯(lián)調(diào)?

Nginx項(xiàng)目壓縮包地址如下:

https://hkm-web.oss-cn-beijing.aliyuncs.com/%E6%8E%A5%E5%8F%A3%E6%96%87%E6%A1%A3

運(yùn)行及如果如下:

現(xiàn)在啟動(dòng)項(xiàng)目后會(huì)自動(dòng)跳轉(zhuǎn)到登陸界面,而不是和以前一樣直接進(jìn)入登陸后的界面

登錄校驗(yàn)-Filter-登錄校驗(yàn)過濾器,Java Web學(xué)習(xí)跟蹤筆記,狀態(tài)模式,java,Filter,JWT令牌、?成功登錄后就可以進(jìn)入登陸后的界面

登錄校驗(yàn)-Filter-登錄校驗(yàn)過濾器,Java Web學(xué)習(xí)跟蹤筆記,狀態(tài)模式,java,Filter,JWT令牌、

?文章來源地址http://www.zghlxwxcb.cn/news/detail-675851.html

?

到了這里,關(guān)于登錄校驗(yàn)-Filter-登錄校驗(yàn)過濾器的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 【Spring Security】使用 OncePerRequestFilter 過濾器校驗(yàn)登錄過期、請(qǐng)求日志等操作

    OncePerRequestFilter 是一個(gè)過濾器,每個(gè)請(qǐng)求都會(huì)執(zhí)行一次;一般開發(fā)中主要是做檢查是否已登錄、Token是否過期和授權(quán)等操作,而每個(gè)操作都是一個(gè)過濾器,下面演示一下。 檢查是否登錄過期過濾器 檢查是否登錄過期過濾器 End

    2024年02月10日
    瀏覽(18)
  • Java設(shè)計(jì)模式之過濾器模式(Filter Pattern)

    過濾器模式(Filter Pattern)是一種常用的設(shè)計(jì)模式,它用于通過一系列條件來過濾對(duì)象集合,并將滿足條件的對(duì)象保留下來。該模式可以幫助我們?cè)诓恍薷脑紝?duì)象集合的情況下,根據(jù)特定的條件對(duì)集合進(jìn)行篩選和處理。 在過濾器模式中,通常有三個(gè)核心角色: 過濾器接口(

    2024年02月07日
    瀏覽(20)
  • 認(rèn)識(shí)Filter(過濾器)

    認(rèn)識(shí)Filter(過濾器)

    Filter介紹 在計(jì)算機(jī)編程中,F(xiàn)ilter(過濾器)是一種用于對(duì)數(shù)據(jù)流進(jìn)行處理的軟件組件。Filter 的作用是從輸入流中獲取數(shù)據(jù),對(duì)其進(jìn)行處理后再將其寫入輸出流中。Filter 組件通常用于數(shù)據(jù)校驗(yàn)、數(shù)據(jù)轉(zhuǎn)換、數(shù)據(jù)壓縮等方面,以及對(duì)網(wǎng)絡(luò)通信進(jìn)行處理。在 Web 開發(fā)中,F(xiàn)ilter 是

    2024年02月02日
    瀏覽(31)
  • Filter 過濾器

    Filter 過濾器

    Filter過濾器介紹 這里我們講解Filter的執(zhí)行流程,從下圖可以大致了解到,當(dāng)客戶端發(fā)送請(qǐng)求的時(shí)候,會(huì)經(jīng)過過濾器,然后才能到我們的servlet,當(dāng)我們的servlet處理完請(qǐng)求之后,我們的response還是先經(jīng)過過濾器才能到達(dá)我們的客戶端,這里我們進(jìn)行一個(gè)代碼的演示,看看具體執(zhí)

    2024年02月02日
    瀏覽(28)
  • 過濾器Filter

    過濾器Filter

    什么是Filter? Filter表示過濾器,是JavaWeb三大組件(Servlet、FIlter、Listener)之一。 過濾器可以把對(duì)資源的請(qǐng)求攔截下來,總而實(shí)現(xiàn)一些特殊的功能 使用過濾器后,要想訪問web服務(wù)器上的資源,必須先經(jīng)過過濾器,過濾器處理完畢后,才可以訪問對(duì)應(yīng)的資源。 過濾器一般完成

    2023年04月12日
    瀏覽(28)
  • 結(jié)果過濾器—MVC項(xiàng)目中結(jié)果過濾器(Result Filter)使用

    結(jié)果過濾器—MVC項(xiàng)目中結(jié)果過濾器(Result Filter)使用

    結(jié)果過濾器( ResultFilter ),是對(duì)執(zhí)行的Action結(jié)果進(jìn)行處理的一種AOP思想,適用于任何需要直接環(huán)繞 View 或格式化處理的邏輯。結(jié)果過濾器可以 替換或更改 Action 結(jié)果 。在 IActionResult 執(zhí)行的前后執(zhí)行,使用它能夠控制Action的執(zhí)行結(jié)果,比如:格式化結(jié)果等。需要注意的是,它只

    2024年02月12日
    瀏覽(102)
  • SpringCloudGateway--過濾器(內(nèi)置filter)

    SpringCloudGateway--過濾器(內(nèi)置filter)

    目錄 一、概覽 二、內(nèi)置過濾器 1、StripPrefix 2、AddRequestHeader 3、AddResponseHeader 4、DedupeResponseHeader 5、AddRequestParameter 6、CircuitBreaker 7、FallbackHeaders 8、RequestRateLimiter 9、RedirectTo 10、RemoveRequestHeader 11、RemoveResponseHeader 12、RemoveRequestParameter 13、RewritePath? 14、RewriteResponseHeader? 15、S

    2024年02月01日
    瀏覽(28)
  • 布隆過濾器(Bloom Filter)

    布隆過濾器(Bloom Filter)

    通常我們會(huì)遇到很多要判斷一個(gè)元素是否在某個(gè)集合中的業(yè)務(wù)場(chǎng)景,一般想到的是將集合中所有元素保存起來,然后通過比較確定。鏈表、樹、散列表(又叫哈希表,Hash table)等等數(shù)據(jù)結(jié)構(gòu)都是這種思路。但是隨著集合中元素的增加,我們需要的存儲(chǔ)空間也會(huì)呈現(xiàn)線性增長,

    2024年02月08日
    瀏覽(34)
  • JavaWeb 中 Filter過濾器

    JavaWeb 中 Filter過濾器

    @ 目錄 Filter過濾器 每博一文案 1. Filter 過濾器的概述 2. Filter 過濾器的編寫 3. Filter 過濾器的執(zhí)行過程解析 3.1 Filter 過濾結(jié)合 Servlet 的使用 4. Filter 過濾器的攔截路徑: 4.1 精確匹配路徑 4.2 目錄匹配 4.3 前后綴名路徑匹配 4.4 所有路徑匹配 5. 設(shè)置 Filter 執(zhí)行順序 6. Filter 過濾器中

    2024年02月03日
    瀏覽(23)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包