THIS IS A TEST INSTANCE. ALL YOUR CHANGES WILL BE LOST!!!!
Wiki Markup |
---|
This design is intended to address the following issues: |
...
[KNOX-179@jira]: Simple way to introduce new servlet filters into the chains |
...
[KNOX-103@jira]: Support multiple <pattern> children in <resource> for gateway.xml |
...
[KNOX-177@jira]: Simplify service deployment contributor implementation |
...
Each of these issues stem from what is currently expected of a {{ServiceDeploymentContributor}} in its {{contributeService}} method. |
...
Basically each service deployment contributor is expected to build its own filter chain. |
...
This is currently done by making calls to {{Deploymentcontext.contributeFilter}}. |
...
While this provides a great deal of flexibility for each service to define a custom chain we have found that this isn't commonly necessary. |
...
Furthermore it makes if very difficult if not impossible to introduce new filters in a chain without impacting all services. |
...
This design will provide an abstraction to the service deployment contributors that can create either a default or specifically configured chain of filters. |
...
The goal is to support a pattern in service deployment contributors that looks like this |
...
Code Block | ||||
---|---|---|---|---|
java | java | title | : {newcode:java|title=ServiceDeploymentContributor.contributeService | } public void contributeService( DeploymentContext context, Service service ) throws Exception { String chain = null; // Default if null, otherwise specific chain name defined in topoloy.xml Map<String,Map<String,String>> params = null; // Default if null, otherwise map of per provider role map of name/value pairs. ResourceDescriptor resource = context.addResource() resource.role( "WEBHDFS" ); resource.pattern( "webhdfs/v1/?**" ); resource.pattern( "webhdfs/v1/**?**" ); context.contributeChain( service, resource, nullchain, params ); } {newcode} {newcode:xml} <topology> <gateway> <provider/> <chain> </chain> </gateway> </topology> {xml} {plantuml |
:title | =Classes | } scale 1280 width class DeploymentContext { GatewayConfig getGatewayConfig(); Topology getTopology(); WebArchive getWebArchive(); WebAppDescriptor getWebAppDescriptor(); GatewayDescriptor getGatewayDescriptor(); <b>void contributeChain( Service service, ResourceDescriptor resource, String chainName, Map<String,Map<String,String>> providerParams ) void contributeFilter( Service service, ResourceDescriptor resource, String role, String name, List<FilterParamDescriptor> params ); void addDescriptor( String name, Object descriptor ); <T> T getDescriptor( String name ); } class ServiceDeploymentContributor { String getRole(); String getName(); void initializeContribution( DeploymentContext context ); void contributeService( DeploymentContext context, Service service ) throws Exception; void finalizeContribution( DeploymentContext context ); } {plantuml} | ||
PlantUML | ||||
| ||||
\\ {plantuml:title= Sample Sequences} Filter -> Chain: Text {plantuml} |