Java 如何使用servlet过滤器拦截其他应用程序的请求?
我想设计一个应用程序,记录在同一apache服务器上运行的另一个应用程序的请求和响应。我将用java编写这个程序,并将使用SpringBoot。我知道,使用spring,您可以轻松编写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
谢谢。您需要使用类似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中的说明:
我无法对目标应用程序进行任何调整,我需要做的只是截取请求和响应。无论如何,谢谢你的建议。我会调查的。谢谢!当我确信这就是我想要的时,我会接受它作为答案