Search in sources :

Example 1 with CXFEHCacheReplayCache

use of org.apache.cxf.ws.security.cache.CXFEHCacheReplayCache in project cxf by apache.

the class WSS4JUtils method getReplayCache.

/**
 * Get a ReplayCache instance. It first checks to see whether caching has been explicitly
 * enabled or disabled via the booleanKey argument. If it has been set to false then no
 * replay caching is done (for this booleanKey). If it has not been specified, then caching
 * is enabled only if we are not the initiator of the exchange. If it has been specified, then
 * caching is enabled.
 *
 * It tries to get an instance of ReplayCache via the instanceKey argument from a
 * contextual property, and failing that the message exchange. If it can't find any, then it
 * defaults to using an EH-Cache instance and stores that on the message exchange.
 */
public static ReplayCache getReplayCache(SoapMessage message, String booleanKey, String instanceKey) {
    boolean specified = false;
    Object o = message.getContextualProperty(booleanKey);
    if (o != null) {
        if (!PropertyUtils.isTrue(o)) {
            return null;
        }
        specified = true;
    }
    if (!specified && MessageUtils.isRequestor(message)) {
        return null;
    }
    Endpoint ep = message.getExchange().getEndpoint();
    if (ep != null && ep.getEndpointInfo() != null) {
        EndpointInfo info = ep.getEndpointInfo();
        synchronized (info) {
            ReplayCache replayCache = (ReplayCache) message.getContextualProperty(instanceKey);
            if (replayCache == null) {
                replayCache = (ReplayCache) info.getProperty(instanceKey);
            }
            if (replayCache == null) {
                String cacheKey = instanceKey;
                if (info.getName() != null) {
                    int hashcode = info.getName().toString().hashCode();
                    if (hashcode < 0) {
                        cacheKey += hashcode;
                    } else {
                        cacheKey += "-" + hashcode;
                    }
                }
                URL configFile = SecurityUtils.getConfigFileURL(message, SecurityConstants.CACHE_CONFIG_FILE, "cxf-ehcache.xml");
                if (ReplayCacheFactory.isEhCacheInstalled()) {
                    Bus bus = message.getExchange().getBus();
                    replayCache = new CXFEHCacheReplayCache(cacheKey, bus, configFile);
                } else {
                    ReplayCacheFactory replayCacheFactory = ReplayCacheFactory.newInstance();
                    replayCache = replayCacheFactory.newReplayCache(cacheKey, configFile);
                }
                info.setProperty(instanceKey, replayCache);
            }
            return replayCache;
        }
    }
    return null;
}
Also used : EndpointInfo(org.apache.cxf.service.model.EndpointInfo) Bus(org.apache.cxf.Bus) CXFEHCacheReplayCache(org.apache.cxf.ws.security.cache.CXFEHCacheReplayCache) ReplayCacheFactory(org.apache.wss4j.common.cache.ReplayCacheFactory) Endpoint(org.apache.cxf.endpoint.Endpoint) ReplayCache(org.apache.wss4j.common.cache.ReplayCache) CXFEHCacheReplayCache(org.apache.cxf.ws.security.cache.CXFEHCacheReplayCache) Endpoint(org.apache.cxf.endpoint.Endpoint) URL(java.net.URL)

Aggregations

URL (java.net.URL)1 Bus (org.apache.cxf.Bus)1 Endpoint (org.apache.cxf.endpoint.Endpoint)1 EndpointInfo (org.apache.cxf.service.model.EndpointInfo)1 CXFEHCacheReplayCache (org.apache.cxf.ws.security.cache.CXFEHCacheReplayCache)1 ReplayCache (org.apache.wss4j.common.cache.ReplayCache)1 ReplayCacheFactory (org.apache.wss4j.common.cache.ReplayCacheFactory)1