example code for BAEL-3749 (#8679)
* example code for BAEL-3749 * added live test * added live test
This commit is contained in:
parent
fbbafeb4d2
commit
4869ddbc3e
|
@ -19,6 +19,7 @@
|
|||
<module>spring-zuul-foos-resource</module>
|
||||
<module>spring-zuul-ui</module>
|
||||
<module>spring-zuul-rate-limiting</module>
|
||||
<module>spring-zuul-post-filter</module>
|
||||
</modules>
|
||||
|
||||
<dependencyManagement>
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
target/*
|
||||
*.iml
|
|
@ -0,0 +1,25 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<artifactId>spring-cloud-zuul</artifactId>
|
||||
<groupId>com.baeldung.spring.cloud</groupId>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>spring-zuul-post-filter</artifactId>
|
||||
|
||||
<properties>
|
||||
<spring-cloud.version>Hoxton.SR1</spring-cloud.version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.springframework.cloud</groupId>
|
||||
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
|
||||
</project>
|
|
@ -0,0 +1,14 @@
|
|||
package com.baeldung;
|
||||
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
|
||||
|
||||
@SpringBootApplication
|
||||
@EnableZuulProxy
|
||||
public class ZuulPostFilterApplication {
|
||||
|
||||
public static void main(String... args) {
|
||||
SpringApplication.run(ZuulPostFilterApplication.class, args);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
package com.baeldung.controllers;
|
||||
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
|
||||
@Controller
|
||||
@RequestMapping("/greeting")
|
||||
public class GreetingController {
|
||||
|
||||
@GetMapping("/simple")
|
||||
public ResponseEntity<String> getSimple() {
|
||||
return ResponseEntity.ok("Hi");
|
||||
}
|
||||
}
|
|
@ -0,0 +1,58 @@
|
|||
package com.baeldung.filters;
|
||||
|
||||
import com.google.common.io.CharStreams;
|
||||
import com.netflix.zuul.ZuulFilter;
|
||||
import com.netflix.zuul.context.RequestContext;
|
||||
import com.netflix.zuul.exception.ZuulException;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
|
||||
import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.POST_TYPE;
|
||||
|
||||
@Component
|
||||
public class ResponseLogFilter extends ZuulFilter {
|
||||
|
||||
private Logger logger = LoggerFactory.getLogger(ResponseLogFilter.class);
|
||||
|
||||
@Override
|
||||
public String filterType() {
|
||||
return POST_TYPE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int filterOrder() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldFilter() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object run() throws ZuulException {
|
||||
|
||||
RequestContext context = RequestContext.getCurrentContext();
|
||||
try (final InputStream responseDataStream = context.getResponseDataStream()) {
|
||||
|
||||
if(responseDataStream == null) {
|
||||
logger.info("BODY: {}", "");
|
||||
return null;
|
||||
}
|
||||
|
||||
String responseData = CharStreams.toString(new InputStreamReader(responseDataStream, "UTF-8"));
|
||||
logger.info("BODY: {}", responseData);
|
||||
|
||||
context.setResponseBody(responseData);
|
||||
}
|
||||
catch (Throwable e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
server:
|
||||
port: 8080
|
||||
zuul:
|
||||
prefix: /api
|
||||
routes:
|
||||
greeting-service:
|
||||
path: /greeting/**
|
||||
url: forward:/greeting
|
||||
foos-service:
|
||||
path: /foos/**
|
||||
url: http://localhost:8081/spring-zuul-foos-resource/foos
|
|
@ -0,0 +1,30 @@
|
|||
package com.baeldung;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.boot.test.web.client.TestRestTemplate;
|
||||
import org.springframework.boot.web.server.LocalServerPort;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest(webEnvironment= SpringBootTest.WebEnvironment.DEFINED_PORT)
|
||||
public class ZuulPostFilterLiveTest {
|
||||
|
||||
@LocalServerPort
|
||||
private int port;
|
||||
private static final String SIMPLE_GREETING = "/api/greeting/simple";
|
||||
private TestRestTemplate restTemplate = new TestRestTemplate();
|
||||
|
||||
@Test
|
||||
public void whenClientCallApi_thenLogAndReturnResponseBody() {
|
||||
String url = "http://localhost:" + port + SIMPLE_GREETING;
|
||||
ResponseEntity<String> response = restTemplate.getForEntity(url, String.class);
|
||||
assertTrue(response.getStatusCode().is2xxSuccessful());
|
||||
assertEquals(response.getBody(), "Hi");
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue