statefulReverseProxy (Stateful Reverse Proxy)

A stateful reverse proxy executes an orchestration when an HTTP endpoint, defined by the Flow server's base URL plus path, is visited. The subsequent HTTP response is as though that upstream host's address was visited instead.

The difference a stateful reverse proxy has from a standard reverse proxy is that a stateful reverse proxy allows access to some of the session's stateful data, which has some rare use cases in regards to repeated authentication (eg. an entire application where login behaviour would need to be cached).

The path and upstream host are mandatory fields.

class names

scala: code.data.StatefulRevProxyFactory
javascript: code_data_StatefulRevProxyFactory

aliases

statefulRevProxy

config

{"categories":[{"defaultCollapsed":true,"fields":["poolSize","sharedPoolName","streamType","mutualReentranceKey","nonReentrant","killOnStop","orchestrationTimeout","orchestratorName","env","isRunning","runOnlyOnHosts","runOnlyOnRanks","runOnlyOnRoles","deepDiagnostics","startupPriority"],"name":"Advanced Run Configuration"}],"fieldName":"statefulReverseProxy","fields":[{"default":null,"fieldName":"statefulReverseProxy.upstreamHost","hidden":false,"hideLabel":false,"name":"upstreamHost","readonly":false,"renderStrategies":[],"type":"S","validators":[]},{"default":null,"fieldName":"statefulReverseProxy.runOnlyOnRanks","hidden":false,"hideLabel":false,"itemType":{"default":null,"fieldName":"statefulReverseProxy.runOnlyOnRanks.runOnlyOnRanks","hidden":false,"hideLabel":false,"name":"runOnlyOnRanks","readonly":false,"renderStrategies":[],"type":"I","validators":[]},"name":"runOnlyOnRanks","readonly":false,"renderStrategies":[],"type":"A"},{"default":null,"fieldName":"statefulReverseProxy.name","hidden":false,"hideLabel":false,"name":"name","readonly":false,"renderStrategies":[],"type":"S","validators":[]},{"default":"statefulReverseProxy","fieldName":"statefulReverseProxy.classPath","hidden":false,"hideLabel":false,"name":"classPath","readonly":false,"renderStrategies":[],"type":"S","validators":[]},{"default":null,"fieldName":"statefulReverseProxy.bundle","hidden":false,"hideLabel":false,"name":"bundle","readonly":false,"renderStrategies":[],"type":"S","validators":[]},{"default":1,"fieldName":"statefulReverseProxy.threadPoolSize","hidden":false,"hideLabel":false,"name":"threadPoolSize","readonly":false,"renderStrategies":[],"type":"I","validators":[]},{"default":1,"fieldName":"statefulReverseProxy.totalThreadPoolSize","hidden":false,"hideLabel":false,"name":"totalThreadPoolSize","readonly":false,"renderStrategies":[],"type":"I","validators":[]},{"default":null,"fieldName":"statefulReverseProxy.mutualReentrancyKey","hidden":false,"hideLabel":false,"name":"mutualReentrancyKey","readonly":false,"renderStrategies":[],"type":"S","validators":[]},{"default":null,"fieldName":"statefulReverseProxy.path","hidden":false,"hideLabel":false,"name":"path","readonly":false,"renderStrategies":[],"type":"S","validators":[{"pattern":"^[\\/]?[^\\/\\n\\r]+[^\\n\\r]*$","rule":"regexMatch"}]},{"default":["AWSALB","AWSALBCORS","JSESSIONID","sessionid","csrftoken"],"fieldName":"statefulReverseProxy.withheldCookies","hidden":false,"hideLabel":false,"itemType":{"default":null,"fieldName":"statefulReverseProxy.withheldCookies.withheldCookies","hidden":false,"hideLabel":false,"name":"withheldCookies","readonly":false,"renderStrategies":[],"type":"S","validators":[]},"name":"withheldCookies","readonly":false,"renderStrategies":[],"type":"A"},{"default":"collecting","fieldName":"statefulReverseProxy.streamType","hidden":false,"hideLabel":false,"name":"streamType","readonly":false,"renderStrategies":[],"type":"S","validators":[{"choices":["collecting","eager","forgetful"],"displayOverride":{},"rule":"choices","unenforced":false}]},{"default":false,"fieldName":"statefulReverseProxy.deepDiagnostics","hidden":false,"hideLabel":false,"name":"deepDiagnostics","readonly":false,"renderStrategies":[],"type":"B","validators":[]},{"default":null,"fieldName":"statefulReverseProxy.runOnlyOnRoles","hidden":false,"hideLabel":false,"itemType":{"default":null,"fieldName":"statefulReverseProxy.runOnlyOnRoles.runOnlyOnRoles","hidden":false,"hideLabel":false,"name":"runOnlyOnRoles","readonly":false,"renderStrategies":[],"type":"S","validators":[{"choices":["frontend","backend","viewer"],"displayOverride":{},"rule":"choices","unenforced":false}]},"name":"runOnlyOnRoles","readonly":false,"renderStrategies":[],"type":"A"},{"default":[],"fieldName":"statefulReverseProxy.additionalHeaders","hidden":false,"hideLabel":false,"itemType":{"categories":[],"fieldName":"statefulReverseProxy.additionalHeaders.additionalHeaders","fields":[{"default":null,"fieldName":"statefulReverseProxy.additionalHeaders.0.additionalHeaders.key","hidden":false,"hideLabel":false,"name":"key","readonly":false,"renderStrategies":[],"type":"S","validators":[]},{"default":null,"fieldName":"statefulReverseProxy.additionalHeaders.0.additionalHeaders.value","hidden":false,"hideLabel":false,"name":"value","readonly":false,"renderStrategies":[],"type":"S","validators":[]}],"hidden":false,"hideLabel":false,"name":"additionalHeaders","readonly":false,"renderStrategies":[],"type":"O"},"name":"additionalHeaders","readonly":false,"renderStrategies":[],"type":"A"},{"default":false,"fieldName":"statefulReverseProxy.logToConsole","hidden":false,"hideLabel":false,"name":"logToConsole","readonly":false,"renderStrategies":[],"type":"B","validators":[]},{"default":[],"fieldName":"statefulReverseProxy.certificateAuthorities","hidden":false,"hideLabel":false,"itemType":{"default":null,"fieldName":"statefulReverseProxy.certificateAuthorities.certificateAuthorities","hidden":false,"hideLabel":false,"name":"certificateAuthorities","readonly":false,"renderStrategies":[],"type":"S","validators":[]},"name":"certificateAuthorities","readonly":false,"renderStrategies":[],"type":"A"},{"default":"","fieldName":"statefulReverseProxy.description","hidden":false,"hideLabel":false,"name":"description","readonly":false,"renderStrategies":[],"type":"S","validators":[]},{"default":false,"fieldName":"statefulReverseProxy.stateful","hidden":false,"hideLabel":false,"name":"stateful","readonly":false,"renderStrategies":[],"type":"B","validators":[]},{"bindingHint":"the size of the threadpool. If this is set to a positive number, this trigger will use a dedicated threadpool. If this is set to zero or less, it will use the default shared threadpool.","canReference":true,"default":null,"fieldName":"statefulReverseProxy.poolSize","hidden":false,"hideLabel":false,"label":"threadpool size","name":"poolSize","readonly":false,"renderStrategies":[],"type":"I","validators":[]},{"default":false,"fieldName":"statefulReverseProxy.nonReentrant","hidden":false,"hideLabel":false,"name":"nonReentrant","readonly":false,"renderStrategies":[],"type":"B","validators":[]},{"default":null,"fieldName":"statefulReverseProxy.orchestratorName","hidden":false,"hideLabel":false,"name":"orchestratorName","readonly":false,"renderStrategies":[],"type":"S","validators":[]},{"default":false,"fieldName":"statefulReverseProxy.immediatelyConsumeStream","hidden":false,"hideLabel":false,"name":"immediatelyConsumeStream","readonly":false,"renderStrategies":[],"type":"B","validators":[]},{"bindingHint":"If this trigger is set to use a dedicated threadpool (using the poolSize attribute), then this name will override which threadpool this trigger uses. By default, triggers using dedicated threadpools will use a threadpool each, but if you set multiple triggers with the same name and pool size, they will share that pool.","canReference":true,"default":null,"fieldName":"statefulReverseProxy.sharedPoolName","hidden":false,"hideLabel":false,"label":"shared threadpool","name":"sharedPoolName","readonly":false,"renderStrategies":[],"type":"S","validators":[]},{"default":["JSESSIONID_"],"fieldName":"statefulReverseProxy.withheldCookiePrefixes","hidden":false,"hideLabel":false,"itemType":{"default":null,"fieldName":"statefulReverseProxy.withheldCookiePrefixes.withheldCookiePrefixes","hidden":false,"hideLabel":false,"name":"withheldCookiePrefixes","readonly":false,"renderStrategies":[],"type":"S","validators":[]},"name":"withheldCookiePrefixes","readonly":false,"renderStrategies":[],"type":"A"},{"default":"${generatedId}","fieldName":"statefulReverseProxy.id","hidden":false,"hideLabel":false,"name":"id","readonly":false,"renderStrategies":[],"type":"S","validators":[]},{"default":[],"fieldName":"statefulReverseProxy.withheldHeaders","hidden":false,"hideLabel":false,"itemType":{"default":null,"fieldName":"statefulReverseProxy.withheldHeaders.withheldHeaders","hidden":false,"hideLabel":false,"name":"withheldHeaders","readonly":false,"renderStrategies":[],"type":"S","validators":[]},"name":"withheldHeaders","readonly":false,"renderStrategies":[],"type":"A"},{"bindingHint":"This is the order of startup when multiple stateful behaviours are being started at the same time. This is usually when a recipe is being run, or a bundle is being loaded, but is especially relevant when the server is being started.","default":400,"fieldName":"statefulReverseProxy.startupPriority","hidden":false,"hideLabel":false,"name":"startupPriority","readonly":false,"renderStrategies":[],"type":"I","validators":[{"max":449.0,"min":350.0,"rule":"numberRange"}]},{"default":null,"fieldName":"statefulReverseProxy.authenticationFlow","hidden":false,"hideLabel":false,"name":"authenticationFlow","readonly":false,"renderStrategies":[],"type":"S","validators":[]},{"default":443,"fieldName":"statefulReverseProxy.upstreamPort","hidden":false,"hideLabel":false,"name":"upstreamPort","readonly":false,"renderStrategies":[],"type":"I","validators":[]},{"default":null,"fieldName":"statefulReverseProxy.runOnlyOnHosts","hidden":false,"hideLabel":false,"itemType":{"default":null,"fieldName":"statefulReverseProxy.runOnlyOnHosts.runOnlyOnHosts","hidden":false,"hideLabel":false,"name":"runOnlyOnHosts","readonly":false,"renderStrategies":[],"type":"S","validators":[]},"name":"runOnlyOnHosts","readonly":false,"renderStrategies":[],"type":"A"},{"default":false,"fieldName":"statefulReverseProxy.isRunning","hidden":false,"hideLabel":false,"name":"isRunning","readonly":false,"renderStrategies":[],"type":"B","validators":[]},{"default":false,"fieldName":"statefulReverseProxy.killOnStop","hidden":false,"hideLabel":false,"name":"killOnStop","readonly":false,"renderStrategies":[],"type":"B","validators":[]},{"default":"https","fieldName":"statefulReverseProxy.upstreamScheme","hidden":false,"hideLabel":false,"name":"upstreamScheme","readonly":false,"renderStrategies":[],"type":"S","validators":[]},{"canReference":false,"default":180000,"fieldName":"statefulReverseProxy.orchestrationTimeout","hidden":false,"hideLabel":false,"label":"Orchestration Timeout","name":"orchestrationTimeout","readonly":false,"renderStrategies":[{"config":{"precision":3,"timeUnit":"ms"},"type":"valueAsTimeSpan"}],"type":"L","validators":[]},{"default":"statefulBehaviour","fieldName":"statefulReverseProxy.type","hidden":false,"hideLabel":false,"name":"type","readonly":false,"renderStrategies":[],"type":"S","validators":[]},{"default":[],"fieldName":"statefulReverseProxy.upstreamPath","hidden":false,"hideLabel":false,"itemType":{"default":null,"fieldName":"statefulReverseProxy.upstreamPath.upstreamPath","hidden":false,"hideLabel":false,"name":"upstreamPath","readonly":false,"renderStrategies":[],"type":"S","validators":[]},"name":"upstreamPath","readonly":false,"renderStrategies":[],"type":"A"},{"default":60000,"fieldName":"statefulReverseProxy.timeout","hidden":false,"hideLabel":false,"name":"timeout","readonly":false,"renderStrategies":[],"type":"L","validators":[]},{"default":true,"fieldName":"statefulReverseProxy.validateCertificates","hidden":false,"hideLabel":false,"name":"validateCertificates","readonly":false,"renderStrategies":[],"type":"B","validators":[]},{"default":null,"fieldName":"statefulReverseProxy.env","hidden":false,"hideLabel":false,"name":"env","readonly":false,"renderStrategies":[],"type":"S","validators":[]},{"default":true,"fieldName":"statefulReverseProxy.overrideHostHeader","hidden":false,"hideLabel":false,"name":"overrideHostHeader","readonly":false,"renderStrategies":[],"type":"B","validators":[]}],"hidden":false,"hideLabel":false,"label":"Triggerer Configuration","name":"statefulReverseProxy","readonly":false,"renderStrategies":[],"type":"O"}