HeaderFilter
Removes headers from and adds headers to request and response messages. Headers are added to any existing headers in the message. To replace a header, remove the header and then add it again.
Usage
{ "name": string, "type": "HeaderFilter", "config": { "messageType": enumeration, "remove": [ string, ... ], "add": { name: [ runtime expression<string>, ... ], ... } } }
Properties
"messageType"
: enumeration, requiredIndicates the type of message to filter headers for. Must be one of:
"REQUEST"
,"RESPONSE"
."remove"
: array of strings, optionalThe names of header fields to remove from the message.
"add"
: object, optionalHeader fields to add to the message. The header name is specified by
name
. The header values are specified by an array of runtime expressions that evaluate to strings.
Examples
The following example replaces the host header on the incoming request with the value myhost.com
:
{ "name": "ReplaceHostFilter", "type": "HeaderFilter", "config": { "messageType": "REQUEST", "remove": [ "host" ], "add": { "host": [ "myhost.com" ] } } }
The following example adds a Set-Cookie
header to the response:
{ "name": "SetCookieFilter", "type": "HeaderFilter", "config": { "messageType": "RESPONSE", "add": { "Set-Cookie": [ "mysession=12345" ] } } }
The following example adds the headers custom1
and custom2
to the request:
{ "name": "SetCustomHeaders", "type": "HeaderFilter", "config": { "messageType": "REQUEST", "add": { "custom1": [ "12345", "6789" ], "custom2": [ "abcd" ] } } }
The following example adds the value of session's policy enforcement token to the pef_sso_token
header in the response:
{ "type": "HeaderFilter", "config": { "messageType": "RESPONSE", "add": { "pef_sso_token": ["${session.pef_token}"] } } }
The following example adds a message to the request and response as it passes through the Chain, and the capture
on the ReverseProxyHandler logs the result. With IG and the sample application set up as described in Getting Started Guide, access this route on http://openig.example.com:8080/home/chain.
{ "condition": "${matches(request.uri.path, '^/home/chain')}", "handler": { "type": "Chain", "comment": "Base configuration defines the capture decorator", "config": { "filters": [ { "type": "HeaderFilter", "comment": "Add a header to all requests", "config": { "messageType": "REQUEST", "add": { "MyHeaderFilter_request": [ "Added by HeaderFilter to request" ] } } }, { "type": "HeaderFilter", "comment": "Add a header to all responses", "config": { "messageType": "RESPONSE", "add": { "MyHeaderFilter_response": [ "Added by HeaderFilter to response" ] } } } ], "handler": { "type": "ReverseProxyHandler", "comment": "Log request, pass it to the sample app, log response", "capture": "all", "baseURI": "http://app.example.com:8081" } } } }
The chain receives the request and context and processes it as follows:
The first
HeaderFilter
adds a header to the incoming request.The second
HeaderFilter
manages responses not requests, so it simply passes the request and context to the handler.The
ReverseProxyHandler
captures (logs) the request.The
ReverseProxyHandler
forwards the transformed request to the protected application.The protected application passes a response to the
ReverseProxyHandler
.The
ReverseProxyHandler
captures (logs) the response.The second
HeaderFilter
adds a header added to the response.The first
HeaderFilter
is configured to manage requests, not responses, so it simply passes the response back to IG.
The following example lists some of the HTTP requests and responses captured as they flow through the chain. You can search the log files for MyHeaderFilter_request
and MyHeaderFilter_response
.
### Original request from user-agent GET http://openig.example.com:8080/home/chain HTTP/1.1 Accept: */* Host: openig.example.com:8080 ### Add a header to the request (inside IG) and direct it to the protected application GET http://app.example.com:8081/home/chain HTTP/1.1 Accept: */* Host: openig.example.com:8080 MyHeaderFilter_request: Added by HeaderFilter to request ### Return the response to the user-agent HTTP/1.1 200 OK Content-Length: 1809 Content-Type: text/html; charset=ISO-8859-1 ### Add a header to the response (inside IG) HTTP/1.1 200 OK Content-Length: 1809 MyHeaderFilter_response: Added by HeaderFilter to response