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

springboot使用過濾器詳解

 更新時間:2024年10月29日 10:08:26   作者:天空中那座城  
本文主要介紹了過濾器的基本概念,過濾器的生命周期,以及如何通過注解方式和非注解方式實現(xiàn)過濾器,過濾器是客戶端與服務(wù)器資源文件之間的一道過濾網(wǎng),能夠幫助我們過濾不符合要求的請求,通常用作Session校驗

一:過濾器

1.過濾器介紹

過濾器是處于客戶端與服務(wù)器資源文件之間的一道過濾網(wǎng),幫助我們過濾一些不符合要求的請求。

通常用作 Session校驗,判斷用戶權(quán)限。

2.過濾器生命周期

使用過濾器很簡單,只需要實現(xiàn)Filter類,然后重寫它的3個方法即可。

  • init方法:程序啟動調(diào)用Filter的init()方法(永遠只調(diào)用一次);在容器中創(chuàng)建當前過濾器的時候自動調(diào)用這個方法。
  • destory方法:程序停止調(diào)用Filter的destroy()方法(永遠只調(diào)用一次);在容器中銷毀當前過濾器的時候自動調(diào)用這個方法。
  • doFilter方法:doFilter()方法每次的訪問請求如果符合攔截條件都會調(diào)用(程序第一次運行,會在servlet調(diào)用init()方法以后調(diào)用;不管第幾次,都在調(diào)用doGet(),doPost()方法之前)。這個方法有3個參數(shù),分別是ServletRequest、ServletResponse和FilterChain可以從參數(shù)中獲取HttpServletReguest和HttpServletResponse對象進行相應的處理操作。

二:使用注解方式實現(xiàn)過濾器(@WebFilter)

1.在springboot 啟動類添加該注解@ServletComponentScan

@SpringBootApplication
@ServletComponentScan // 過濾器
public class Springboot02WebTestApplication {
    SpringApplication.run(Springboot02WebTestApplication.class, args);
}

2.寫個過濾器類,實現(xiàn)Filter接口

import com.alibaba.fastjson.JSONObject;
import org.springframework.core.annotation.Order;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.io.PrintWriter;

// urlPatterns 過濾路徑  filterName 過濾器name
@WebFilter(urlPatterns = "/user/*", filterName = "tokenFilter1")
public class TokenFilter1 implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
//        Filter.super.init(filterConfig);
        System.out.println("init");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("doFilter");
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        String token = request.getHeader("token");
        System.out.println(token);
        //該方法執(zhí)行后直接運行至下一個過濾器
        if(token!=null){
            filterChain.doFilter(servletRequest, servletResponse);
        }else{
            servletResponse.setCharacterEncoding("UTF-8");
            servletResponse.setContentType("application/json; charset=utf-8");
            PrintWriter out = servletResponse.getWriter();
            JSONObject res = new JSONObject();
            res.put("msg", "錯誤");
            res.put("success", "false");
            out.append(res.toString());
        }
    }

    @Override
    public void destroy() {
//        Filter.super.destroy();
        System.out.println("destroy");
    }
}

3.訪問,我使用的Postman軟件進行的測試

添加請求頭token信息,才可以訪問成功。

三:使用非注解方式實現(xiàn)過濾器(直接注入到spring中)

1.Filter代碼

import com.alibaba.fastjson.JSONObject;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.io.PrintWriter;

public class TokenFilter2 implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("init");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("doFilter");
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        String token = request.getHeader("token");
        System.out.println(token);
        //該方法執(zhí)行后直接運行至下一個過濾器
        if(token!=null){
            filterChain.doFilter(servletRequest, servletResponse);
        }else{
            servletResponse.setCharacterEncoding("UTF-8");
            servletResponse.setContentType("application/json; charset=utf-8");
            PrintWriter out = servletResponse.getWriter();
            JSONObject res = new JSONObject();
            res.put("msg", "錯誤");
            res.put("success", "false");
            out.append(res.toString());
        }
    }

    @Override
    public void destroy() {
        System.out.println("destroy");
    }
}

2.Filter配置文件

import com.itsufu.filter.TokenFilter2;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


@Configuration
public class FilterConfig {

    // Filter代碼類
    @Bean
    public TokenFilter2 tokenFilter2() {
        return new TokenFilter2();
    }

    @Bean
    public FilterRegistrationBean getFilterRegistrationBean(TokenFilter2 tokenFilter2) {
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
        filterRegistrationBean.setFilter(tokenFilter2);
        filterRegistrationBean.setOrder(2);
        filterRegistrationBean.addUrlPatterns("/user/*");
        filterRegistrationBean.setName("tokenFilter2");
        return filterRegistrationBean;
    }
}

測試與注解式一樣。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

怀柔区| 黄骅市| 廉江市| 石渠县| 西畴县| 门源| 右玉县| 浏阳市| 松溪县| 壤塘县| 永仁县| 武汉市| 垫江县| 洪雅县| 黔西县| 巩义市| 昭通市| 辽源市| 苏尼特右旗| 嘉鱼县| 定远县| 东丰县| 延长县| 岳普湖县| 曲周县| 无棣县| 高平市| 鹿邑县| 固安县| 田东县| 九台市| 湘乡市| 岗巴县| 翼城县| 历史| 延津县| 来宾市| 工布江达县| 白城市| 河津市| 尼木县|