Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用servlet过滤器拦截其他应用程序的请求?_Java_Spring_Spring Boot_Servlet Filters - Fatal编程技术网

Java 如何使用servlet过滤器拦截其他应用程序的请求?

Java 如何使用servlet过滤器拦截其他应用程序的请求?,java,spring,spring-boot,servlet-filters,Java,Spring,Spring Boot,Servlet Filters,我想设计一个应用程序,记录在同一apache服务器上运行的另一个应用程序的请求和响应。我将用java编写这个程序,并将使用SpringBoot。我知道,使用spring,您可以轻松编写servlet过滤器和侦听器,这些过滤器和侦听器可以记录或预处理针对当前程序的传入请求。不过,我想要的是记录可能在不同端口接收请求的其他程序的请求。有没有办法用弹簧靴做到这一点 我只找到了这条线,但没有答案 谁能给我指出正确的方向吗 谢谢。您需要使用类似spring cloud starter netflix zu

我想设计一个应用程序,记录在同一apache服务器上运行的另一个应用程序的请求和响应。我将用java编写这个程序,并将使用SpringBoot。我知道,使用spring,您可以轻松编写servlet过滤器和侦听器,这些过滤器和侦听器可以记录或预处理针对当前程序的传入请求。不过,我想要的是记录可能在不同端口接收请求的其他程序的请求。有没有办法用弹簧靴做到这一点

我只找到了这条线,但没有答案

谁能给我指出正确的方向吗


谢谢。

您需要使用类似spring cloud starter netflix zuul的工具来创建反向代理,该代理能够拦截所有请求和响应,同时透明地将它们转发到正确的服务。 您的Apache必须配置为将调用定向到此类反向代理应用程序,而您的目标应用程序可能需要一些小的调整,具体取决于它的编写方式

如果使用Maven,则pom.xml文件需要包括以下内容:

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-contract-stub-runner</artifactId>
            <exclusions>
                <exclusion>
                    <artifactId>spring-boot-starter-web</artifactId>
                    <groupId>org.springframework.boot</groupId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
server:
  port: 80

zuul:
  addHostHeader: true
  sensitiveHeaders:
  ignoredServices: '*'
  routes:
    mysvc:
      path: /mysvc/**
      serviceId: mysvc-svc
      stripPrefix: false
    uisvc:
      path: /uisvc/**
      serviceId: uisvc-frontend-svc
      stripPrefix: true


hystrix:
  command:
    mysvc-svc:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 120000
    uisvc-frontend-svc:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 30000

mysvc-svc:
  ribbon:
    NIWSServerListClassName: com.netflix.loadbalancer.ConfigurationBasedServerList
    listOfServers: localhost:8080 # comma-separated list
    ConnectTimeout: 5000
    ReadTimeout: 120000
    MaxTotalHttpConnections: 500
    MaxConnectionsPerHost: 100

uisvc-frontend-svc:
  ribbon:
    NIWSServerListClassName: com.netflix.loadbalancer.ConfigurationBasedServerList
    listOfServers: localhost:4200 # comma-separated list
    ConnectTimeout: 1000
    ReadTimeout: 10000
    MaxTotalHttpConnections: 500
    MaxConnectionsPerHost: 100

您的Application.java主类需要大致如下所示:

@SpringBootApplication
@EnableZuulProxy
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
此时,您应该能够将逻辑连接到全新的网关应用程序中,并使用RequestContext类截获请求,方法是大致遵循以下url中的说明:

我无法对目标应用程序进行任何调整,我需要做的只是截取请求和响应。无论如何,谢谢你的建议。我会调查的。谢谢!当我确信这就是我想要的时,我会接受它作为答案