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

SpringBoot登錄校驗(四)過濾器Filter

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

JWT令牌生成后,客戶端發(fā)的請求頭中會帶有JWT令牌,服務(wù)端需要校驗每個請求的令牌,如果在每個controller方法中添加校驗?zāi)K,則十分復(fù)雜且冗余,所以引入統(tǒng)一攔截模塊,將請求攔截下來并做校驗,這塊內(nèi)容可以選擇兩種技術(shù):

  1. Filter過濾器

  2. Interceptor攔截器

我們首先來學(xué)習(xí)過濾器Filter。

什么是過濾器

什么是Filter?

  • Filter表示過濾器,是 JavaWeb三大組件(Servlet、Filter、Listener)之一。

  • 過濾器可以把對資源的請求攔截下來,從而實現(xiàn)一些特殊的功能

    • 使用了過濾器之后,要想訪問web服務(wù)器上的資源,必須先經(jīng)過濾器,過濾器處理完畢之后,才可以訪問對應(yīng)的資源。

  • 過濾器一般完成一些通用的操作,比如:登錄校驗、統(tǒng)一編碼處理、敏感字符處理等。

?SpringBoot登錄校驗(四)過濾器Filter,JavaWeb學(xué)習(xí)筆記,spring boot,后端,java

Filter詳解

下面我們通過Filter快速入門程序掌握過濾器的基本使用操作:

  • 第1步,定義過濾器 :1.定義一個類,實現(xiàn) Filter 接口,并重寫其所有方法。

  • 第2步,配置過濾器:Filter類上加 @WebFilter 注解,配置攔截資源的路徑。引導(dǎo)類上加 @ServletComponentScan 開啟Servlet組件支持。

@WebFilter(urlPatterns = "/*") //配置過濾器要攔截的請求路徑( /* 表示攔截瀏覽器的所有請求 )
public class DemoFilter implements Filter {
    @Override //初始化方法, 只調(diào)用一次
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("init 初始化方法執(zhí)行了");
    }

    @Override //攔截到請求之后調(diào)用, 調(diào)用多次
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("Demo 攔截到了請求...放行前邏輯");
        //放行
        chain.doFilter(request,response);
    }

    @Override //銷毀方法, 只調(diào)用一次
    public void destroy() {
        System.out.println("destroy 銷毀方法執(zhí)行了");
    }
}

當(dāng)我們在Filter類上面加了@WebFilter注解之后,接下來我們還需要在啟動類上面加上一個注解@ServletComponentScan,通過這個@ServletComponentScan注解來開啟SpringBoot項目對于Servlet組件的支持。

@ServletComponentScan
@SpringBootApplication
public class TliasWebManagementApplication {
?
 ? ?public static void main(String[] args) {
 ? ? ? ?SpringApplication.run(TliasWebManagementApplication.class, args);
 ?  }
?
}

注意事項:

在過濾器Filter中,如果不執(zhí)行放行操作,將無法訪問后面的資源。 放行操作:chain.doFilter(request, response);

現(xiàn)在我們已完成了Filter過濾器的基本使用,下面我們將學(xué)習(xí)Filter過濾器在使用過程中的一些細(xì)節(jié)。

執(zhí)行流程

首先我們先來看下過濾器的執(zhí)行流程:

SpringBoot登錄校驗(四)過濾器Filter,JavaWeb學(xué)習(xí)筆記,spring boot,后端,java

doFilter方法:

放行前代碼

放行:filterChain.doFilter(servletRequest,servletResponse)

放行后代碼

@WebFilter(urlPatterns = "/*") 
public class DemoFilter implements Filter {
    
    @Override //初始化方法, 只調(diào)用一次
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("init 初始化方法執(zhí)行了");
    }
    
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        
        System.out.println("DemoFilter   放行前邏輯.....");

        //放行請求
        filterChain.doFilter(servletRequest,servletResponse);

        System.out.println("DemoFilter   放行后邏輯.....");
        
    }

    @Override //銷毀方法, 只調(diào)用一次
    public void destroy() {
        System.out.println("destroy 銷毀方法執(zhí)行了");
    }
}

攔截路徑

在過濾器實現(xiàn)類上的注解@WebFilter中配置不同的攔截資源路徑:

攔截路徑 urlPatterns值 含義
攔截具體路徑 /login 只有訪問 /login 路徑時,才會被攔截
目錄攔截 /emps/* 訪問/emps下的所有資源,都會被攔截
攔截所有 /* 訪問所有資源,都會被攔截

?過濾器鏈

最后我們在來介紹下過濾器鏈,什么是過濾器鏈呢?所謂過濾器鏈指的是在一個web應(yīng)用程序當(dāng)中,可以配置多個過濾器,多個過濾器就形成了一個過濾器鏈。

SpringBoot登錄校驗(四)過濾器Filter,JavaWeb學(xué)習(xí)筆記,spring boot,后端,java

以注解方式配置的Filter過濾器,它的執(zhí)行優(yōu)先級是按時過濾器類名的自動排序確定的,類名排名越靠前,優(yōu)先級越高。 ?

登錄校驗應(yīng)用

大概清楚了在Filter過濾器的實現(xiàn)步驟了,那在正式開發(fā)登錄校驗過濾器之前,我們思考兩個問題:

  1. 所有的請求,攔截到了之后,都需要校驗令牌嗎?

    • 答案:登錄請求例外

  2. 攔截到請求后,什么情況下才可以放行,執(zhí)行業(yè)務(wù)操作?

    • 答案:有令牌,且令牌校驗通過(合法);否則都返回未登錄錯誤結(jié)果

SpringBoot登錄校驗(四)過濾器Filter,JavaWeb學(xué)習(xí)筆記,spring boot,后端,java文章來源地址http://www.zghlxwxcb.cn/news/detail-854802.html

@Slf4j
@WebFilter(urlPatterns = "/*") //攔截所有請求
public class LoginCheckFilter implements Filter {

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
        //前置:強(qiáng)制轉(zhuǎn)換為http協(xié)議的請求對象、響應(yīng)對象 (轉(zhuǎn)換原因:要使用子類中特有方法)
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;

        //1.獲取請求url
        String url = request.getRequestURL().toString();
        log.info("請求路徑:{}", url); //請求路徑:http://localhost:8080/login


        //2.判斷請求url中是否包含login,如果包含,說明是登錄操作,放行
        if(url.contains("/login")){
            chain.doFilter(request, response);//放行請求
            return;//結(jié)束當(dāng)前方法的執(zhí)行
        }


        //3.獲取請求頭中的令牌(token)
        String token = request.getHeader("token");
        log.info("從請求頭中獲取的令牌:{}",token);


        //4.判斷令牌是否存在,如果不存在,返回錯誤結(jié)果(未登錄)
        if(!StringUtils.hasLength(token)){
            log.info("Token不存在");

            Result responseResult = Result.error("NOT_LOGIN");
            //把Result對象轉(zhuǎn)換為JSON格式字符串 (fastjson是阿里巴巴提供的用于實現(xiàn)對象和json的轉(zhuǎn)換工具類)
            String json = JSONObject.toJSONString(responseResult);
            response.setContentType("application/json;charset=utf-8");
            //響應(yīng)
            response.getWriter().write(json);

            return;
        }

        //5.解析token,如果解析失敗,返回錯誤結(jié)果(未登錄)
        try {
            JwtUtils.parseJWT(token);
        }catch (Exception e){
            log.info("令牌解析失敗!");

            Result responseResult = Result.error("NOT_LOGIN");
            //把Result對象轉(zhuǎn)換為JSON格式字符串 (fastjson是阿里巴巴提供的用于實現(xiàn)對象和json的轉(zhuǎn)換工具類)
            String json = JSONObject.toJSONString(responseResult);
            response.setContentType("application/json;charset=utf-8");
            //響應(yīng)
            response.getWriter().write(json);

            return;
        }


        //6.放行
        chain.doFilter(request, response);

    }
}
<dependency>
? ? <groupId>com.alibaba</groupId>
? ? <artifactId>fastjson</artifactId>
? ? <version>1.2.76</version>
</dependency>?

到了這里,關(guān)于SpringBoot登錄校驗(四)過濾器Filter的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 登錄頁面jwt密鑰,過濾器,攔截器,異常處理

    需求: 用戶未登錄時,訪問其他也沒面,操作添加、刪除等操作時,強(qiáng)行跳轉(zhuǎn)至登錄頁面。 實現(xiàn)方法: 1.使用Cookie,登錄后后端添加一個cookie,每次頁面判斷是否有cookie, 2。使用session,原理同上,只不過session是存儲在服務(wù)器里的,cookie是在瀏覽器里。 3。使用jwt令牌,登

    2023年04月25日
    瀏覽(26)
  • springboot使用過濾器

    過濾器是處于客戶端與服務(wù)器資源文件之間的一道過濾網(wǎng),幫助我們過濾一些不符合要求的請求。通常用作 Session校驗,判斷用戶權(quán)限。 使用過濾器很簡單,只需要實現(xiàn)Filter類,然后重寫它的3個方法即可。 init方法:程序啟動調(diào)用Filter的init()方法(永遠(yuǎn)只調(diào)用一次);在容器中

    2024年02月15日
    瀏覽(96)
  • Springboot 過濾器

    攔截器和過濾器的區(qū)別: 過濾器(Filter) :可以拿到原始的http請求,但是拿不到你請求的控制器和請求控制器中的方法的信息。 攔截器(Interceptor):可以拿到你請求的控制器和方法,卻拿不到請求方法的參數(shù)。 切片(Aspect): 可以拿到方法的參數(shù),但是卻拿不到http請求和

    2023年04月15日
    瀏覽(27)
  • 在Spring boot中 使用JWT和過濾器實現(xiàn)登錄認(rèn)證

    在Spring boot中 使用JWT和過濾器實現(xiàn)登錄認(rèn)證

    在navicat中運行如下sql,準(zhǔn)備一張user表 導(dǎo)入pom.xml坐標(biāo) 在工utils包下創(chuàng)建一個用于生成和解析JWT 令牌的工具類 在pojo包下創(chuàng)建user類 在mapper包下添加 UserMapper接口 在service包下添加 UserService類 在utils包下添加統(tǒng)一響應(yīng)結(jié)果封裝類 在controller包下添加LoginController類 這樣登錄獲取toke

    2024年02月06日
    瀏覽(18)
  • springboot中使用filter過濾器

    springboot中使用filter過濾器

    filter過濾器其實是JavaEE中的規(guī)范,JavaWeb中的三大組件是filter過濾器、listener監(jiān)聽器,servlet服務(wù)。 過濾器的作用就是把請求攔截下來,從而對請求進(jìn)行一些特殊操作,比如檢驗用戶是否登錄,判斷權(quán)限,設(shè)置編碼格式、敏感字符處理等。 filter過濾器中有三個方法: 分別是初始

    2024年02月08日
    瀏覽(26)
  • springboot 過濾器鏈 來自 chatgpt

    當(dāng)需要在Spring Boot中配置多個過濾器時,可以按照以下步驟進(jìn)行操作: 創(chuàng)建多個自定義過濾器類:首先,你需要創(chuàng)建多個實現(xiàn) javax.servlet.Filter 接口的自定義過濾器類,每個過濾器類都需要實現(xiàn) doFilter 方法來定義過濾器的邏輯處理。 配置過濾器鏈:在Spring Boot應(yīng)用程序的配置

    2024年02月12日
    瀏覽(17)
  • 【深入淺出Spring Security(五)】自定義過濾器進(jìn)行前后端登錄認(rèn)證

    【深入淺出Spring Security(五)】自定義過濾器進(jìn)行前后端登錄認(rèn)證

    在【深入淺出Spring Security(二)】Spring Security的實現(xiàn)原理 中小編闡述了默認(rèn)加載的過濾器,里面有些過濾器有時并不能滿足開發(fā)中的實際需求,這個時候就需要我們自定義過濾器,然后填入或者替換掉原先存在的過濾器。 首先闡述一下添加過濾器的四個方法(都是 HttpSecur

    2024年02月08日
    瀏覽(24)
  • SpringBoot很實用的請求過濾器 - FilterRegistrationBean

    SpringBoot很實用的請求過濾器 - FilterRegistrationBean

    在日常的開發(fā)中,我們的項目可能會被各種各樣的客戶端進(jìn)行訪問,那么,一些帶有意圖的朋友,就會利用自己所學(xué)的技術(shù)進(jìn)行有目的的訪問,那么我們的服務(wù)端就不再安全和可靠, 我相信每位開發(fā)者都知道爬蟲這種東西,那么當(dāng)我們的請求不再安全,那么我們后臺的數(shù)據(jù)就

    2024年02月07日
    瀏覽(24)
  • SpringBoot實現(xiàn)過濾器Filter的三種方式

    SpringBoot實現(xiàn)過濾器Filter的三種方式

    過濾器 Filter 由 Servlet 提供,基于函數(shù)回調(diào)實現(xiàn)鏈?zhǔn)綄W(wǎng)絡(luò)請求與響應(yīng)的攔截與修改。由于基于 Servlet ,其可以對web服務(wù)器管理的幾乎所有資源進(jìn)行攔截(JSP、圖片文件、HTML 文件、CSS文件等)。 Filter 的生命周期 init(): 初始化Filter 實例,F(xiàn)ilter 的生命周期與 Servlet 是相同的,

    2024年02月14日
    瀏覽(17)
  • 【SpringBoot】過濾器,監(jiān)聽器,攔截器介紹

    【SpringBoot】過濾器,監(jiān)聽器,攔截器介紹

    通過兩幅圖我們可以理解攔截器和過濾器的特點 1、過濾器 過濾器是在請求進(jìn)入tomcat容器后,但請求進(jìn)入servlet之前進(jìn)行預(yù)處理的。請求結(jié)束返回也是,是在servlet處理完后,返回給前端之前。 理解上面這句話我們就可以知道,進(jìn)入servlet之前,主要是兩個參數(shù):ServletRequest,

    2024年02月04日
    瀏覽(27)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包