IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> springboot http代理 手动注册多个servlet -> 正文阅读

[Java知识库]springboot http代理 手动注册多个servlet

java的http代理已经存在可以直接使用的库, smiley-http-proxy-servlet,原理就是copy请求,进行转发
需求有点类似网关的功能,就是对请求进行前置与后置处理,不想引入springcloud与springgateway,所以就需要对smiley-http-proxy-servlet做一些封装
a. 主要是需要手动注册多个servlet,监听一些请求,
b. Servlet在执行service方法时,可改写请求参数
c. Servlet在执行service方法后, 对servletRequest与servletResponse进行copy,
d. 做一些业务处理

  1. 引入smiley-http-proxy-servlet库
    pom.xml
        <dependency>
            <groupId>org.mitre.dsmiley.httpproxy</groupId>
            <artifactId>smiley-http-proxy-servlet</artifactId>
            <version>1.12.1</version>
        </dependency>
  1. 配置监听的请求和转发的请求,
    application.yml
proxy:
  configs:
    - servlet_url: /proxy/*
      target_url: http://192.168.0.4:8401/handler1
#      logging_enabled: false
    - servlet_url: /proxy_1/*
      target_url: http://192.168.0.141:9004/handler
      logging_enabled: true

    - servlet_url: /proxy_2/*
      target_url: http://192.168.0.141:8400/handler2
      logging_enabled: true
  1. 配置类
@Data
@ConfigurationProperties(prefix = "proxy")
@Component
public class ProxyConfig {
    private List<ProxyProperties> configs;
    @Data
    public static class ProxyProperties {
        private String servletUrl;
        private String targetUrl;
        private Boolean loggingEnabled =false;
    }

}
  1. springboot 代码形式手动注册servlet
@Component
public class ServletConfig implements ServletContextInitializer{
    private final ProxyConfig config;
    @Autowired
    public ServletConfig(ProxyConfig config){
        this.config = config;
    }
    @Override
    public void onStartup(ServletContext servletContext) {
        List<ProxyConfig.ProxyProperties> propertiesList = config.getConfigs();
        for (int i = 0; i < propertiesList.size(); i++) {
            ProxyConfig.ProxyProperties properties = propertiesList.get(i);
            //定义多个servlet
            ServletRegistration initServlet = servletContext.addServlet("MyProxyServlet"+i, MyProxyServlet.class);
            initServlet.addMapping(properties.getServletUrl());
            initServlet.setInitParameter(ProxyServlet.P_TARGET_URI, properties.getTargetUrl());
            initServlet.setInitParameter(ProxyServlet.P_LOG, properties.getLoggingEnabled().toString());
        }
    }
}
  1. 重写servlet, 获取请求,与结果,对其进行一些记录,或者

public class MyProxyServlet extends ProxyServlet {

    private SourceController biddingController;
	//重写servlet, 获取servletRequest与servletResponse
    protected void service(HttpServletRequest servletRequest, HttpServletResponse servletResponse) throws ServletException, IOException {
        MyHttpServletRequestWrapper requestWrapper = new MyHttpServletRequestWrapper(servletRequest);
        byte[] res = serviceV1(super.targetUri,requestWrapper,servletResponse);//改写请求参数
        this.doExtend(requestWrapper,res);//获取到rep与resp后,去业务处理....
    }

}
  1. 重写ServletRequest类
public class MyHttpServletRequestWrapper extends HttpServletRequestWrapper {
	...略
}
  1. 获取请求返回的结果,
    使用smiley-http-proxy-servlet的ProxyServlet::copyResponseEntity方法即可
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-09-24 20:42:44  更:2022-09-24 20:43:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 8:45:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码