| = Meecrowave Proxy |
| :jbake-date: 2019-06-07 |
| :jbake-type: page |
| :jbake-status: published |
| :jbake-meecrowavepdf: |
| :jbake-meecrowavetitleicon: icon icon_puzzle_alt |
| :jbake-meecrowavecolor: blue-green |
| :icons: font |
| |
| Coordinates: |
| |
| [source,xml] |
| ---- |
| <dependency> |
| <groupId>org.apache.meecrowave</groupId> |
| <artifactId>meecrowave-proxy</artifactId> |
| <version>${meecrowave.version}</version> |
| </dependency> |
| ---- |
| |
| Simple proxy module using Meecrowave as backbone. |
| It can be extended using CDI programming model and JAX-RS client. |
| |
| == Configuration |
| |
| include::../../../../../target/generated-doc/ProxyConfiguration.adoc[] |
| |
| TIP: you can use that servlet in a plain Servlet container (adding JAX-RS+JSON-B client). |
| An integration example can be found in `org.apache.meecrowave.proxy.servlet.meecrowave.ProxyServletSetup#accept`. |
| |
| == Configuration File |
| |
| Each route defines an execution context which means: |
| |
| . A way to match the incoming request (by method + prefix for now), |
| . A way to forward the incoming request (which target server is called), |
| . A way to execute the request isolated in a dedicated thread (how many threads are allocated to the route, which timeout to use, ...). |
| |
| The routes file follows the following shape: |
| |
| [source,json] |
| ---- |
| { |
| "defaultRoute": { // optional |
| // ... anything a route can get, it is used as default for plain "routes" |
| }, |
| "routes": [ |
| { |
| "id": "get-simple", |
| "requestConfiguration": { |
| "method": "GET", |
| "prefix": "/prefix-to-match", |
| "addedHeaders" : { "Authorization": "Value", ... }, |
| "skippedHeaders" : [ "Content-Length", ... ], |
| "skippedCookies" : [ "Cookie", ... ], |
| }, |
| "responseConfiguration": { |
| "target": "http://....", |
| "skippedHeaders" : [ "Content-Length", ... ], |
| "skippedCookies" : [ "Cookie", ... ], |
| }, |
| "clientConfiguration": { |
| "executor": { |
| "core": 8, |
| "max": 512, |
| "keepAlive": 60000, |
| "shutdownTimeout": 1 |
| }, |
| "timeouts": { |
| "connect": 30000, |
| "read": 30000, |
| "execution": 60000 |
| }, |
| "sslConfiguration": { |
| "acceptAnyCertificate": false, |
| "keystoreLocation": "...", |
| "keystoreType": "...", |
| "keystorePassword": "...", |
| "truststoreType": "...", |
| "verifiedHostnames": ["..."] |
| } |
| }, |
| "extensions": { // optional, used for custom extensions and let the user enrich the route configuration |
| } |
| }, |
| // ... |
| ], |
| "extensions": { // optional |
| } |
| } |
| ---- |
| |
| TIP: the file is filtered with system properties so you can use `${system-prop-key}`. |
| |
| == Extend |
| |
| The default implementation uses `CDIProxyServlet` which triggers multiple events to let you extend the proxy implementation: |
| |
| . `BeforeRequest` and `AfterResponse` which are sent around the proxying, |
| . `OnRequest` and `OnResponse` which enables you to replace the way the request is mapped to the proxied server and the way the response of the proxied server is mapped to the client. |
| |
| Since `meecrowave-proxy` is a simple meecrowave module you can embed it and customize it as any CDI application. |