广告
返回顶部
首页 > 资讯 > 后端开发 > Python >SpringBoot过滤器实现项目内接口过滤详解
  • 420
分享到

SpringBoot过滤器实现项目内接口过滤详解

Python 官方文档:入门教程 => 点击学习

摘要

目录业务需要处理的问题公众号用户信息与业务系统做绑定将路由中心的接口与业务系统的接口判断处理步骤全部代码代理转发实现业务 由于业务需求,存在两套项目,一套是路由中心,一套是业务系统.

业务

由于业务需求,存在两套项目,一套是路由中心,一套是业务系统.

现在存在问题是,路由中心集成了微信公众号与小程序模块功能,业务系统部署了多套服务.

现在需要通过调用路由中心将接口重新路由到指定的业务系统中

需要处理的问题

  • 将小程序,公众号用户信息与业务系统做绑定
  • 将路由中心的接口与业务系统的接口判断出来
  • 通过用户信息找到的业务系统服务,分发到对应的业务系统中

公众号用户信息与业务系统做绑定

处理步骤

业务系统存在手机号,如果用户注册将手机号发送给路由中心记录

将路由中心的接口与业务系统的接口判断

处理步骤

1.获取路由中心系统中接口映射

    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.获取请求接口路径

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

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

        if (URLS.contains(requestName)) {
		//系统接口
            chain.doFilter(servletRequest, servletResponse);
        } else {
		//业务系统接口 需要代理
//            代理请求
            ResponseEntity<String> redirect = routerService.redirect(request, response, "xxx", "xxx");
            //设置将字符以"UTF-8"编码输出到客户端浏览器
            response.setCharacterEncoding("UTF-8");
            //通过设置响应头控制浏览器以UTF-8的编码显示数据,如果不加这句话,那么浏览器显示的将是乱码
            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;


@Configuration
@WebFilter(urlPatterns = "
        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 {
//            代理请求
            ResponseEntity<String> redirect = routerService.redirect(request, response, "http://192.168.2.18/api", "/router");


            //设置将字符以"UTF-8"编码输出到客户端浏览器
            response.setCharacterEncoding("UTF-8");
            //通过设置响应头控制浏览器以UTF-8的编码显示数据,如果不加这句话,那么浏览器显示的将是乱码
            response.setHeader("content-type", "application/json; charset=utf-8");
            response.getWriter().write(redirect.getBody());
        }
        log.info("--------------------------------------------------------");
    }

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

代理转发实现

Spring Boot实现超轻量级网关的方法(反向代理、转发)

到此这篇关于SpringBoot过滤器实现项目内接口过滤详解的文章就介绍到这了,更多相关SpringBoot项目接口过滤内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: SpringBoot过滤器实现项目内接口过滤详解

本文链接: https://www.lsjlt.com/news/210553.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作