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

SpringBoot過濾器實(shí)現(xiàn)項(xiàng)目?jī)?nèi)接口過濾詳解

 更新時(shí)間:2023年04月20日 15:45:46   作者:黑子桑  
這篇文章主要為大家詳細(xì)介紹了SpringBoot如何利用過濾器實(shí)現(xiàn)項(xiàng)目?jī)?nèi)接口過濾,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下

業(yè)務(wù)

由于業(yè)務(wù)需求,存在兩套項(xiàng)目,一套是路由中心,一套是業(yè)務(wù)系統(tǒng).

現(xiàn)在存在問題是,路由中心集成了微信公眾號(hào)與小程序模塊功能,業(yè)務(wù)系統(tǒng)部署了多套服務(wù).

現(xiàn)在需要通過調(diào)用路由中心將接口重新路由到指定的業(yè)務(wù)系統(tǒng)中

需要處理的問題

  • 將小程序,公眾號(hào)用戶信息與業(yè)務(wù)系統(tǒng)做綁定
  • 將路由中心的接口與業(yè)務(wù)系統(tǒng)的接口判斷出來
  • 通過用戶信息找到的業(yè)務(wù)系統(tǒng)服務(wù),分發(fā)到對(duì)應(yīng)的業(yè)務(wù)系統(tǒng)中

公眾號(hào)用戶信息與業(yè)務(wù)系統(tǒng)做綁定

處理步驟

業(yè)務(wù)系統(tǒng)存在手機(jī)號(hào),如果用戶注冊(cè)將手機(jī)號(hào)發(fā)送給路由中心記錄

將路由中心的接口與業(yè)務(wù)系統(tǒng)的接口判斷

處理步驟

1.獲取路由中心系統(tǒng)中接口映射

    private static List<String> URLS = new ArrayList<>();
    @Resource
    private WebApplicationContext applicationContext;
	
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        applicationContext
		.getBean(RequestMappingHandlerMapping.class)
		.getHandlerMethods()
		.forEach((k, v) -> { k.getPatternsCondition().getPatterns().stream().forEach(s-> URLS.add(s)); });
        log.info("過濾器初始化");
    }

2.獲取請(qǐng)求接口路徑

        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        String requestName = request.getRequestURI();

3.判斷是否是路由中心的接口

        if (URLS.contains(requestName)) {
		//系統(tǒng)接口
            chain.doFilter(servletRequest, servletResponse);
        } else {
		//業(yè)務(wù)系統(tǒng)接口 需要代理
//            代理請(qǐng)求
            ResponseEntity<String> redirect = routerService.redirect(request, response, "xxx", "xxx");
            //設(shè)置將字符以"UTF-8"編碼輸出到客戶端瀏覽器
            response.setCharacterEncoding("UTF-8");
            //通過設(shè)置響應(yīng)頭控制瀏覽器以UTF-8的編碼顯示數(shù)據(jù),如果不加這句話,那么瀏覽器顯示的將是亂碼
            response.setHeader("content-type", "application/json; charset=utf-8");
            response.getWriter().write(redirect.getBody());
        }

全部代碼

import com.jyw.router.miniapp.service.IRouterService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.ResponseEntity;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;

import javax.annotation.Resource;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * @author 沈峻
 * @ClassName RouterFilter
 * @Description TODO
 * @Date 2023/4/20 12:23
 **/
@Configuration
@WebFilter(urlPatterns = "/*", filterName = "Router")
@Slf4j
public class RouterFilter implements Filter {

    private static List<String> URLS = new ArrayList<>();
    @Resource
    private WebApplicationContext applicationContext;

    @Resource
    private IRouterService routerService;

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        applicationContext.getBean(RequestMappingHandlerMapping.class).getHandlerMethods().forEach((k, v) -> { k.getPatternsCondition().getPatterns().stream().forEach(s-> URLS.add(s)); });
        log.info("過濾器初始化");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        String requestName = request.getRequestURI();

        /*順手解決跨域問題*/
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Headers", "x-requested-with");

        log.info(requestName);
        if (URLS.contains(requestName)) {
            chain.doFilter(servletRequest, servletResponse);
        } else {
//            代理請(qǐng)求
            ResponseEntity<String> redirect = routerService.redirect(request, response, "http://192.168.2.18/api", "/router");


            //設(shè)置將字符以"UTF-8"編碼輸出到客戶端瀏覽器
            response.setCharacterEncoding("UTF-8");
            //通過設(shè)置響應(yīng)頭控制瀏覽器以UTF-8的編碼顯示數(shù)據(jù),如果不加這句話,那么瀏覽器顯示的將是亂碼
            response.setHeader("content-type", "application/json; charset=utf-8");
            response.getWriter().write(redirect.getBody());
        }
        log.info("--------------------------------------------------------");
    }

    @Override
    public void destroy() {
        Filter.super.destroy();
    }

代理轉(zhuǎn)發(fā)實(shí)現(xiàn)

spring boot實(shí)現(xiàn)超輕量級(jí)網(wǎng)關(guān)的方法(反向代理、轉(zhuǎn)發(fā))

到此這篇關(guān)于SpringBoot過濾器實(shí)現(xiàn)項(xiàng)目?jī)?nèi)接口過濾詳解的文章就介紹到這了,更多相關(guān)SpringBoot項(xiàng)目接口過濾內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解決IDEA創(chuàng)建SpringBoot項(xiàng)目沒有Java版本8問題

    解決IDEA創(chuàng)建SpringBoot項(xiàng)目沒有Java版本8問題

    這篇文章主要介紹了解決IDEA創(chuàng)建SpringBoot項(xiàng)目沒有Java版本8問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • java并發(fā)學(xué)習(xí)之BlockingQueue實(shí)現(xiàn)生產(chǎn)者消費(fèi)者詳解

    java并發(fā)學(xué)習(xí)之BlockingQueue實(shí)現(xiàn)生產(chǎn)者消費(fèi)者詳解

    這篇文章主要介紹了java并發(fā)學(xué)習(xí)之BlockingQueue實(shí)現(xiàn)生產(chǎn)者消費(fèi)者詳解,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • Springboot集成mqtt客戶端詳解

    Springboot集成mqtt客戶端詳解

    MQTT是一個(gè)基于客戶端-服務(wù)器的消息發(fā)布/訂閱傳輸協(xié)議。MQTT協(xié)議是輕量、簡(jiǎn)單、開放和易于實(shí)現(xiàn)的,這些特點(diǎn)使它適用范圍非常廣泛。本文為大家分享了Springboot整合mqtt服務(wù)的示例代碼,需要的可以參考一下
    2022-10-10
  • Java基于IDEA實(shí)現(xiàn)http編程的示例代碼

    Java基于IDEA實(shí)現(xiàn)http編程的示例代碼

    這篇文章主要介紹了Java基于IDEA實(shí)現(xiàn)http編程的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Java后臺(tái)接口開發(fā)初步實(shí)戰(zhàn)教程

    Java后臺(tái)接口開發(fā)初步實(shí)戰(zhàn)教程

    下面小編就為大家分享一篇 Java后臺(tái)接口開發(fā)初步實(shí)戰(zhàn)教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • java實(shí)現(xiàn)中英文混合字符截取方法

    java實(shí)現(xiàn)中英文混合字符截取方法

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)中英文混合字符的截取方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • ElasticSearch查詢文檔基本操作實(shí)例

    ElasticSearch查詢文檔基本操作實(shí)例

    這篇文章主要為大家介紹了ElasticSearch查詢文檔基本操作實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • 基于Java回顧之反射的使用分析

    基于Java回顧之反射的使用分析

    本篇文章是對(duì)Java反射的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 2020最新 idea下載、安裝與創(chuàng)建項(xiàng)目測(cè)試的教程圖解

    2020最新 idea下載、安裝與創(chuàng)建項(xiàng)目測(cè)試的教程圖解

    這篇文章主要介紹了2020最新 idea下載、安裝與創(chuàng)建項(xiàng)目測(cè)試的教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Intellij IDEA神器居然還有這些小技巧

    Intellij IDEA神器居然還有這些小技巧

    Intellij IDEA真是越用越覺得它強(qiáng)大,它總是在我們寫代碼的時(shí)候,不時(shí)給我們來個(gè)小驚喜,本文給大家主要介紹一些你可能不知道的但是又實(shí)用的小技巧,感興趣的朋友跟隨小編一起看看吧
    2021-01-01

最新評(píng)論

泰顺县| 四平市| 洛宁县| 衡山县| 榕江县| 连云港市| 平江县| 大安市| 罗江县| 齐齐哈尔市| 长阳| 陕西省| 阳江市| 原平市| 仲巴县| 鄂托克旗| 和林格尔县| 闻喜县| 琼结县| 肃北| 武邑县| 沙坪坝区| 商洛市| 疏勒县| 巴楚县| 清水河县| 平谷区| 招远市| 八宿县| 沙田区| 安龙县| 新源县| 申扎县| 宁安市| 横峰县| 威信县| 若尔盖县| 恩平市| 北碚区| 双辽市| 娄底市|