THIS IS A TEST INSTANCE. ALL YOUR CHANGES WILL BE LOST!!!!
...
- Get policy from external location and build it for current message.
- Parse WS-Policy XML using Neethi library.
- Store result Policy object into PolicyConstants.POLICY_OVERRIDE message content property.
Important is that this custom policy interceptor is called before CXF PolicyInInterceptor or PolicyOutInterceptor. Than CXF will automatically recognize Policy stored into this property and use it with highest priority.
...
- Provide Assertion Builder class for custom assertion implementing AssertionBuilder<T> interface.
Interface type can be Element, XMLStreamReader or OMElement.
Interface contains two methods: build() and getKnownElements().
Implementation of build() method should construct Assertion from the incoming type. It can be PrimitiveAssertion (without attributes or child elements), NestedPrimitiveAssertion (without attributes but with nested policy element) and JaxbAssertion (assertion described by any XML schema).
getKnownElements() method must return QNames of assertion elements from which assertion can be built. - Implement policy interceptor provider class extending AbstractPolicyInterceptorProvider class. The main task of policy interceptor provider is to say which interceptors must be activated for specified policy assertion. Policy interceptor provider constructor gives assertions QNames as argument of super constructor and adds corresponded interceptors using getters:
Assertion builder and policy interceptor provider can be registered using CXF bus extension mechanism: just create a file META-INF/cxf/bus-extensions.txt containing the following:Code Block public class AuthorizationInterceptorProvider extends AbstractPolicyInterceptorProvider { private static final long serialVersionUID = -5248428637449096540L; private static final AuthorizationInInterceptor IN_AUTHZ_INTERCEPTOR = new AuthorizationInInterceptor(); private static final AuthorizationInInterceptor OUT_AUTHZ_INTERCEPTOR = new AuthorizationOutInterceptor(); private static final Collection<QName> ASSERTION_TYPES; static { ASSERTION_TYPES = new ArrayList<QName>(); ASSERTION_TYPES.add(AuthorizationConstants.AUTHORIZATION_ASSERTION); } public AuthorizationInterceptorProvider() { super(ASSERTION_TYPES); getInInterceptors().add(IN_AUTHZ_INTERCEPTOR); getOutInterceptors().add(OUT_AUTHZ_INTERCEPTOR); } }
Boolean value at the end specifies lazy loading strategy.Code Block org.company.AuthorizationInterceptorProvider::true org.company.AuthorizationAssertionBuilder::true
CXF automatically recognizes the assertion builder and policy interceptor provider and store them into registries: AssertionBuilderRegistry and PolicyInterceptorProviderRegistry. Since CXF 2.6.0 it is possible to register multiple interceptor providers for single assertion.
...