Repository: cxf Updated Branches: refs/heads/master 0f335bac5 -> 591e5d9cb
Some code cleanup + fixes Project: http://git-wip-us.apache.org/repos/asf/cxf/repo Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/591e5d9c Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/591e5d9c Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/591e5d9c Branch: refs/heads/master Commit: 591e5d9cb6ab1ba85a5d37da2fbbf9b53ce777ed Parents: 0f335ba Author: Colm O hEigeartaigh <[email protected]> Authored: Mon May 18 13:19:09 2015 +0100 Committer: Colm O hEigeartaigh <[email protected]> Committed: Mon May 18 13:19:09 2015 +0100 ---------------------------------------------------------------------- .../jose/jws/NoneJwsSignatureVerifier.java | 2 +- ...AbstractRequestAssertionConsumerHandler.java | 2 +- .../server/NettyHttpServerEngineFactory.java | 2 +- .../apache/cxf/transport/http/ProxyFactory.java | 2 +- .../SecureConversationInInterceptor.java | 5 +- .../cxf/ws/security/trust/STSLoginModule.java | 8 +- .../security/trust/STSStaxTokenValidator.java | 4 +- .../cxf/sts/cache/AbstractIdentityCache.java | 137 +++++++++++++++++++ .../cxf/sts/cache/EHCacheIdentityCache.java | 121 +++------------- .../cxf/sts/cache/MemoryIdentityCache.java | 110 ++------------- .../apache/cxf/testutil/common/TestUtil.java | 10 +- 11 files changed, 181 insertions(+), 222 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cxf/blob/591e5d9c/rt/rs/security/jose/src/main/java/org/apache/cxf/rs/security/jose/jws/NoneJwsSignatureVerifier.java ---------------------------------------------------------------------- diff --git a/rt/rs/security/jose/src/main/java/org/apache/cxf/rs/security/jose/jws/NoneJwsSignatureVerifier.java b/rt/rs/security/jose/src/main/java/org/apache/cxf/rs/security/jose/jws/NoneJwsSignatureVerifier.java index ba1fad6..0373bf8 100644 --- a/rt/rs/security/jose/src/main/java/org/apache/cxf/rs/security/jose/jws/NoneJwsSignatureVerifier.java +++ b/rt/rs/security/jose/src/main/java/org/apache/cxf/rs/security/jose/jws/NoneJwsSignatureVerifier.java @@ -24,7 +24,7 @@ public class NoneJwsSignatureVerifier implements JwsSignatureVerifier { @Override public boolean verify(JwsHeaders headers, String unsignedText, byte[] signature) { - return headers.getAlgorithm().equals(getAlgorithm()) && signature.length == 0; + return headers.getAlgorithm().equals(getAlgorithm().getJwaName()) && signature.length == 0; } @Override http://git-wip-us.apache.org/repos/asf/cxf/blob/591e5d9c/rt/rs/security/sso/saml/src/main/java/org/apache/cxf/rs/security/saml/sso/AbstractRequestAssertionConsumerHandler.java ---------------------------------------------------------------------- diff --git a/rt/rs/security/sso/saml/src/main/java/org/apache/cxf/rs/security/saml/sso/AbstractRequestAssertionConsumerHandler.java b/rt/rs/security/sso/saml/src/main/java/org/apache/cxf/rs/security/saml/sso/AbstractRequestAssertionConsumerHandler.java index b66c184..9e5d669 100644 --- a/rt/rs/security/sso/saml/src/main/java/org/apache/cxf/rs/security/saml/sso/AbstractRequestAssertionConsumerHandler.java +++ b/rt/rs/security/sso/saml/src/main/java/org/apache/cxf/rs/security/saml/sso/AbstractRequestAssertionConsumerHandler.java @@ -204,7 +204,7 @@ public abstract class AbstractRequestAssertionConsumerHandler extends AbstractSS reportError("MISSING_RELAY_STATE"); throw ExceptionUtils.toBadRequestException(null, null); } - if (relayState.getBytes().length < 0 || relayState.getBytes().length > 80) { + if (relayState.getBytes().length == 0 || relayState.getBytes().length > 80) { reportError("INVALID_RELAY_STATE"); throw ExceptionUtils.toBadRequestException(null, null); } http://git-wip-us.apache.org/repos/asf/cxf/blob/591e5d9c/rt/transports/http-netty/netty-server/src/main/java/org/apache/cxf/transport/http/netty/server/NettyHttpServerEngineFactory.java ---------------------------------------------------------------------- diff --git a/rt/transports/http-netty/netty-server/src/main/java/org/apache/cxf/transport/http/netty/server/NettyHttpServerEngineFactory.java b/rt/transports/http-netty/netty-server/src/main/java/org/apache/cxf/transport/http/netty/server/NettyHttpServerEngineFactory.java index 43fcb5d..a0da30e 100644 --- a/rt/transports/http-netty/netty-server/src/main/java/org/apache/cxf/transport/http/netty/server/NettyHttpServerEngineFactory.java +++ b/rt/transports/http-netty/netty-server/src/main/java/org/apache/cxf/transport/http/netty/server/NettyHttpServerEngineFactory.java @@ -175,7 +175,7 @@ public class NettyHttpServerEngineFactory implements BusLifeCycleListener { LOG.log(Level.FINE, "CREATING_NETTY_SERVER_ENGINE", port); TLSServerParameters tlsServerParameters = null; if (protocol.equals("https") && tlsServerParametersMap != null) { - tlsServerParameters = tlsServerParametersMap.get(port); + tlsServerParameters = tlsServerParametersMap.get(Integer.toString(port)); } NettyHttpServerEngine ref = getOrCreate(this, host, port, tlsServerParameters); // checking the protocol http://git-wip-us.apache.org/repos/asf/cxf/blob/591e5d9c/rt/transports/http/src/main/java/org/apache/cxf/transport/http/ProxyFactory.java ---------------------------------------------------------------------- diff --git a/rt/transports/http/src/main/java/org/apache/cxf/transport/http/ProxyFactory.java b/rt/transports/http/src/main/java/org/apache/cxf/transport/http/ProxyFactory.java index a97286c..22779db 100644 --- a/rt/transports/http/src/main/java/org/apache/cxf/transport/http/ProxyFactory.java +++ b/rt/transports/http/src/main/java/org/apache/cxf/transport/http/ProxyFactory.java @@ -76,7 +76,7 @@ public class ProxyFactory { // 8080 is the default proxy port value as per some documentation String proxyPort = SystemPropertyAction.getProperty(HTTP_PROXY_PORT, "8080"); if (StringUtils.isEmpty(proxyPort)) { - proxyPort = null; + proxyPort = "8080"; } systemProxyConfiguration.setProxyServerPort(Integer.valueOf(proxyPort)); http://git-wip-us.apache.org/repos/asf/cxf/blob/591e5d9c/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/interceptors/SecureConversationInInterceptor.java ---------------------------------------------------------------------- diff --git a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/interceptors/SecureConversationInInterceptor.java b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/interceptors/SecureConversationInInterceptor.java index 629c711..773afdc 100644 --- a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/interceptors/SecureConversationInInterceptor.java +++ b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/interceptors/SecureConversationInInterceptor.java @@ -530,7 +530,10 @@ class SecureConversationInInterceptor extends AbstractPhaseInterceptor<SoapMessa } client.cancelSecurityToken(tok); - TokenStoreUtils.getTokenStore(m2).remove(tok.getId()); + TokenStore tokenStore = TokenStoreUtils.getTokenStore(m2); + if (tokenStore != null) { + tokenStore.remove(tok.getId()); + } m2.put(SecurityConstants.TOKEN, null); } catch (RuntimeException e) { throw e; http://git-wip-us.apache.org/repos/asf/cxf/blob/591e5d9c/rt/ws/security/src/main/java/org/apache/cxf/ws/security/trust/STSLoginModule.java ---------------------------------------------------------------------- diff --git a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/trust/STSLoginModule.java b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/trust/STSLoginModule.java index 3793f18..b23e124 100644 --- a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/trust/STSLoginModule.java +++ b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/trust/STSLoginModule.java @@ -257,7 +257,7 @@ public class STSLoginModule implements LoginModule { message.put(SecurityConstants.STS_CLIENT, stsClient); data.setMsgContext(message); } else { - TokenStore tokenStore = configureTokenStore(message); + TokenStore tokenStore = configureTokenStore(); validator.setStsClient(stsClient); validator.setTokenStore(tokenStore); } @@ -325,11 +325,7 @@ public class STSLoginModule implements LoginModule { return c; } - private TokenStore configureTokenStore(Message msg) throws MalformedURLException { - if (msg != null) { - return STSTokenValidator.getTokenStore(msg); - } - + private TokenStore configureTokenStore() throws MalformedURLException { if (TokenStoreFactory.isEhCacheInstalled()) { String cfg = "cxf-ehcache.xml"; URL url = null; http://git-wip-us.apache.org/repos/asf/cxf/blob/591e5d9c/rt/ws/security/src/main/java/org/apache/cxf/ws/security/trust/STSStaxTokenValidator.java ---------------------------------------------------------------------- diff --git a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/trust/STSStaxTokenValidator.java b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/trust/STSStaxTokenValidator.java index 31485e6..f89c511 100644 --- a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/trust/STSStaxTokenValidator.java +++ b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/trust/STSStaxTokenValidator.java @@ -533,7 +533,7 @@ public class STSStaxTokenValidator private Element convertToDOM( BinarySecurityTokenType binarySecurityTokenType, byte[] securityTokenData - ) { + ) throws WSSecurityException { Document doc = DOMUtils.newDocument(); BinarySecurity binarySecurity = null; if (WSSConstants.NS_X509_V3_TYPE.equals(binarySecurityTokenType.getValueType())) { @@ -542,6 +542,8 @@ public class STSStaxTokenValidator binarySecurity = new PKIPathSecurity(doc); } else if (WSSConstants.NS_GSS_Kerberos5_AP_REQ.equals(binarySecurityTokenType.getValueType())) { binarySecurity = new KerberosSecurity(doc); + } else { + throw new WSSecurityException(WSSecurityException.ErrorCode.INVALID_SECURITY_TOKEN); } binarySecurity.addWSSENamespace(); http://git-wip-us.apache.org/repos/asf/cxf/blob/591e5d9c/services/sts/sts-core/src/main/java/org/apache/cxf/sts/cache/AbstractIdentityCache.java ---------------------------------------------------------------------- diff --git a/services/sts/sts-core/src/main/java/org/apache/cxf/sts/cache/AbstractIdentityCache.java b/services/sts/sts-core/src/main/java/org/apache/cxf/sts/cache/AbstractIdentityCache.java new file mode 100644 index 0000000..4c3ef25 --- /dev/null +++ b/services/sts/sts-core/src/main/java/org/apache/cxf/sts/cache/AbstractIdentityCache.java @@ -0,0 +1,137 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.cxf.sts.cache; + +import java.security.Principal; +import java.util.HashMap; +import java.util.Map; +import java.util.logging.Level; +import java.util.logging.Logger; + +import org.apache.cxf.Bus; +import org.apache.cxf.common.logging.LogUtils; +import org.apache.cxf.management.ManagedComponent; +import org.apache.cxf.sts.IdentityMapper; +import org.apache.wss4j.common.principal.CustomTokenPrincipal; + +public abstract class AbstractIdentityCache implements IdentityCache, IdentityMapper, ManagedComponent { + + private static final Logger LOG = LogUtils.getL7dLogger(AbstractIdentityCache.class); + + private final IdentityMapper identityMapper; + private final Bus bus; + private MemoryIdentityCacheStatistics statistics; + + public AbstractIdentityCache(IdentityMapper identityMapper) { + this(null, identityMapper); + } + + public AbstractIdentityCache(Bus bus, IdentityMapper identityMapper) { + this.identityMapper = identityMapper; + this.bus = bus; + } + + public Principal mapPrincipal(String sourceRealm, + Principal sourcePrincipal, String targetRealm) { + + Principal targetPrincipal = null; + Map<String, String> identities = this.get(sourcePrincipal.getName(), sourceRealm); + if (identities != null) { + if (LOG.isLoggable(Level.FINE)) { + LOG.fine("Identities found for '" + sourcePrincipal.getName() + "@" + sourceRealm + "'"); + } + // Identities object found for key sourceUser@sourceRealm + String targetUser = identities.get(targetRealm); + if (targetUser == null) { + getStatistics().increaseCacheMiss(); + if (LOG.isLoggable(Level.FINE)) { + LOG.fine("No mapping found for realm " + targetRealm + " of user '" + + sourcePrincipal.getName() + "@" + sourceRealm + "'"); + } + // User identity of target realm not cached yet + targetPrincipal = this.identityMapper.mapPrincipal( + sourceRealm, sourcePrincipal, targetRealm); + // Add the identity for target realm to the cached entry + identities.put(targetRealm, targetPrincipal.getName()); + + // Verify whether target user has cached some identities already + Map<String, String> cachedItem = this.get(targetPrincipal.getName(), targetRealm); + if (cachedItem != null) { + if (LOG.isLoggable(Level.FINE)) { + LOG.fine("Merging mappings for '" + sourcePrincipal.getName() + "@" + sourceRealm + "'"); + } + //Identities already cached for targetUser@targetRealm key pair + //Merge into identities object + this.mergeMap(identities, cachedItem); + } + this.add(targetPrincipal.getName(), targetRealm, identities); + } else { + getStatistics().increaseCacheHit(); + if (LOG.isLoggable(Level.INFO)) { + LOG.info("Mapping '" + sourcePrincipal.getName() + "@" + sourceRealm + "' to '" + + targetUser + "@" + targetRealm + "' cached"); + } + targetPrincipal = new CustomTokenPrincipal(targetUser); + } + + } else { + if (LOG.isLoggable(Level.FINE)) { + LOG.fine("No mapping found for realm " + targetRealm + " of user '" + + sourcePrincipal.getName() + "@" + sourceRealm + "'"); + } + getStatistics().increaseCacheMiss(); + + // Identities object NOT found for key sourceUser@sourceRealm + targetPrincipal = this.identityMapper.mapPrincipal( + sourceRealm, sourcePrincipal, targetRealm); + identities = new HashMap<>(); + identities.put(sourceRealm, sourcePrincipal.getName()); + identities.put(targetRealm, targetPrincipal.getName()); + this.add(targetPrincipal.getName(), targetRealm, identities); + this.add(sourcePrincipal.getName(), sourceRealm, identities); + } + return targetPrincipal; + } + + public MemoryIdentityCacheStatistics getStatistics() { + if (statistics == null) { + this.statistics = new MemoryIdentityCacheStatistics(bus, this); + } + return statistics; + } + + public void setStatistics(MemoryIdentityCacheStatistics stats) { + this.statistics = stats; + } + + private void mergeMap(Map<String, String> to, Map<String, String> from) { + for (Map.Entry<String, String> entry : from.entrySet()) { + to.put(entry.getKey(), entry.getValue()); + } + for (Map.Entry<String, String> entry : to.entrySet()) { + from.put(entry.getKey(), entry.getValue()); + } + } + + protected Bus getBus() { + return bus; + } +} + http://git-wip-us.apache.org/repos/asf/cxf/blob/591e5d9c/services/sts/sts-core/src/main/java/org/apache/cxf/sts/cache/EHCacheIdentityCache.java ---------------------------------------------------------------------- diff --git a/services/sts/sts-core/src/main/java/org/apache/cxf/sts/cache/EHCacheIdentityCache.java b/services/sts/sts-core/src/main/java/org/apache/cxf/sts/cache/EHCacheIdentityCache.java index 386f1c7..f0591e0 100644 --- a/services/sts/sts-core/src/main/java/org/apache/cxf/sts/cache/EHCacheIdentityCache.java +++ b/services/sts/sts-core/src/main/java/org/apache/cxf/sts/cache/EHCacheIdentityCache.java @@ -22,8 +22,6 @@ package org.apache.cxf.sts.cache; import java.io.Closeable; import java.io.IOException; import java.net.URL; -import java.security.Principal; -import java.util.HashMap; import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; @@ -43,7 +41,6 @@ import org.apache.cxf.buslifecycle.BusLifeCycleManager; import org.apache.cxf.common.classloader.ClassLoaderUtils; import org.apache.cxf.common.logging.LogUtils; import org.apache.cxf.management.InstrumentationManager; -import org.apache.cxf.management.ManagedComponent; import org.apache.cxf.management.ManagementConstants; import org.apache.cxf.management.annotation.ManagedOperation; import org.apache.cxf.management.annotation.ManagedResource; @@ -52,22 +49,18 @@ import org.apache.cxf.sts.IdentityMapper; import org.apache.cxf.ws.security.cache.EHCacheUtils; import org.apache.cxf.ws.security.tokenstore.TokenStoreFactory; import org.apache.wss4j.common.cache.EHCacheManagerHolder; -import org.apache.wss4j.common.principal.CustomTokenPrincipal; /** * A EH-Cache based cache to cache identities in different realms where * the relationship is of type FederateIdentity. */ @ManagedResource() -public class EHCacheIdentityCache - implements IdentityCache, IdentityMapper, Closeable, BusLifeCycleListener, ManagedComponent { +public class EHCacheIdentityCache extends AbstractIdentityCache + implements Closeable, BusLifeCycleListener { private static final Logger LOG = LogUtils.getL7dLogger(EHCacheIdentityCache.class); - private IdentityMapper identityMapper; - private MemoryIdentityCacheStatistics statistics; private Ehcache cache; - private Bus bus; private CacheManager cacheManager; @@ -80,10 +73,8 @@ public class EHCacheIdentityCache public EHCacheIdentityCache( IdentityMapper identityMapper, String key, Bus b, URL configFileURL ) { - this.identityMapper = identityMapper; - - bus = b; - if (bus != null) { + super(b, identityMapper); + if (b != null) { b.getExtension(BusLifeCycleManager.class).registerLifeCycleListener(this); InstrumentationManager im = b.getExtension(InstrumentationManager.class); if (im != null) { @@ -96,9 +87,9 @@ public class EHCacheIdentityCache } if (configFileURL != null) { - cacheManager = EHCacheUtils.getCacheManager(bus, configFileURL); + cacheManager = EHCacheUtils.getCacheManager(b, configFileURL); } else { - cacheManager = EHCacheUtils.getCacheManager(bus, getDefaultConfigFileURL()); + cacheManager = EHCacheUtils.getCacheManager(b, getDefaultConfigFileURL()); } CacheConfiguration cc = EHCacheManagerHolder.getCacheConfiguration(key, cacheManager); @@ -106,17 +97,6 @@ public class EHCacheIdentityCache cache = cacheManager.addCacheIfAbsent(newCache); } - public MemoryIdentityCacheStatistics getStatistics() { - if (statistics == null) { - this.statistics = new MemoryIdentityCacheStatistics(bus, this); - } - return statistics; - } - - public void setStatistics(MemoryIdentityCacheStatistics stats) { - this.statistics = stats; - } - @Override public void add(String user, String realm, Map<String, String> identities) { cache.put(new Element(user + "@" + realm, identities)); @@ -155,80 +135,6 @@ public class EHCacheIdentityCache return this.cache.toString(); } - @Override - public Principal mapPrincipal(String sourceRealm, - Principal sourcePrincipal, String targetRealm) { - - Principal targetPrincipal = null; - Map<String, String> identities = this.get(sourcePrincipal.getName(), sourceRealm); - if (identities != null) { - if (LOG.isLoggable(Level.FINE)) { - LOG.fine("Identities found for '" + sourcePrincipal.getName() + "@" + sourceRealm + "'"); - } - // Identities object found for key sourceUser@sourceRealm - String targetUser = identities.get(targetRealm); - if (targetUser == null) { - getStatistics().increaseCacheMiss(); - if (LOG.isLoggable(Level.FINE)) { - LOG.fine("No mapping found for realm " + targetRealm + " of user '" - + sourcePrincipal.getName() + "@" + sourceRealm + "'"); - } - // User identity of target realm not cached yet - targetPrincipal = this.identityMapper.mapPrincipal( - sourceRealm, sourcePrincipal, targetRealm); - // Add the identity for target realm to the cached entry - identities.put(targetRealm, targetPrincipal.getName()); - - // Verify whether target user has cached some identities already - Map<String, String> cachedItem = this.get(targetPrincipal.getName(), targetRealm); - if (cachedItem != null) { - if (LOG.isLoggable(Level.FINE)) { - LOG.fine("Merging mappings for '" + sourcePrincipal.getName() + "@" + sourceRealm + "'"); - } - //Identites already cached for targetUser@targetRealm key pair - //Merge into identities object - this.mergeMap(identities, cachedItem); - } - this.add(targetPrincipal.getName(), targetRealm, identities); - } else { - getStatistics().increaseCacheHit(); - if (LOG.isLoggable(Level.INFO)) { - LOG.info("Mapping '" + sourcePrincipal.getName() + "@" + sourceRealm + "' to '" - + targetUser + "@" + targetRealm + "' cached"); - } - targetPrincipal = new CustomTokenPrincipal(targetUser); - } - - } else { - if (LOG.isLoggable(Level.FINE)) { - LOG.fine("No mapping found for realm " + targetRealm + " of user '" - + sourcePrincipal.getName() + "@" + sourceRealm + "'"); - } - getStatistics().increaseCacheMiss(); - - // Identities object NOT found for key sourceUser@sourceRealm - targetPrincipal = this.identityMapper.mapPrincipal( - sourceRealm, sourcePrincipal, targetRealm); - identities = new HashMap<>(); - identities.put(sourceRealm, sourcePrincipal.getName()); - identities.put(targetRealm, targetPrincipal.getName()); - this.add(targetPrincipal.getName(), targetRealm, identities); - this.add(sourcePrincipal.getName(), sourceRealm, identities); - } - return targetPrincipal; - } - - - - private void mergeMap(Map<String, String> to, Map<String, String> from) { - for (String key : from.keySet()) { - to.put(key, from.get(key)); - } - for (String key : to.keySet()) { - from.put(key, to.get(key)); - } - } - public void close() { if (cacheManager != null) { // this step is especially important for global shared cache manager @@ -239,8 +145,8 @@ public class EHCacheIdentityCache EHCacheManagerHolder.releaseCacheManger(cacheManager); cacheManager = null; cache = null; - if (bus != null) { - bus.getExtension(BusLifeCycleManager.class).unregisterLifeCycleListener(this); + if (super.getBus() != null) { + super.getBus().getExtension(BusLifeCycleManager.class).unregisterLifeCycleListener(this); } } } @@ -258,8 +164,10 @@ public class EHCacheIdentityCache private URL getDefaultConfigFileURL() { URL url = null; - ResourceManager rm = bus.getExtension(ResourceManager.class); - url = rm.resolveResource("sts-ehcache.xml", URL.class); + if (super.getBus() != null) { + ResourceManager rm = super.getBus().getExtension(ResourceManager.class); + url = rm.resolveResource("sts-ehcache.xml", URL.class); + } try { if (url == null) { url = ClassLoaderUtils.getResource("sts-ehcache.xml", TokenStoreFactory.class); @@ -277,7 +185,10 @@ public class EHCacheIdentityCache public ObjectName getObjectName() throws JMException { StringBuilder buffer = new StringBuilder(); buffer.append(ManagementConstants.DEFAULT_DOMAIN_NAME).append(':'); - buffer.append(ManagementConstants.BUS_ID_PROP).append('=').append(bus.getId()).append(','); + if (super.getBus() != null) { + buffer.append( + ManagementConstants.BUS_ID_PROP).append('=').append(super.getBus().getId()).append(','); + } buffer.append(ManagementConstants.TYPE_PROP).append('=').append("EHCacheIdentityCache").append(','); buffer.append(ManagementConstants.NAME_PROP).append('=') .append("EHCacheIdentityCache-" + System.identityHashCode(this)); http://git-wip-us.apache.org/repos/asf/cxf/blob/591e5d9c/services/sts/sts-core/src/main/java/org/apache/cxf/sts/cache/MemoryIdentityCache.java ---------------------------------------------------------------------- diff --git a/services/sts/sts-core/src/main/java/org/apache/cxf/sts/cache/MemoryIdentityCache.java b/services/sts/sts-core/src/main/java/org/apache/cxf/sts/cache/MemoryIdentityCache.java index c18ccdd..358efbb 100644 --- a/services/sts/sts-core/src/main/java/org/apache/cxf/sts/cache/MemoryIdentityCache.java +++ b/services/sts/sts-core/src/main/java/org/apache/cxf/sts/cache/MemoryIdentityCache.java @@ -19,7 +19,6 @@ package org.apache.cxf.sts.cache; -import java.security.Principal; import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -32,19 +31,17 @@ import javax.management.ObjectName; import org.apache.cxf.Bus; import org.apache.cxf.common.logging.LogUtils; import org.apache.cxf.management.InstrumentationManager; -import org.apache.cxf.management.ManagedComponent; import org.apache.cxf.management.ManagementConstants; import org.apache.cxf.management.annotation.ManagedOperation; import org.apache.cxf.management.annotation.ManagedResource; import org.apache.cxf.sts.IdentityMapper; -import org.apache.wss4j.common.principal.CustomTokenPrincipal; /** * A simple in-memory HashMap based cache to cache identities in different realms where * the relationship is of type FederateIdentity. */ @ManagedResource() -public class MemoryIdentityCache implements IdentityCache, IdentityMapper, ManagedComponent { +public class MemoryIdentityCache extends AbstractIdentityCache { private static final Logger LOG = LogUtils.getL7dLogger(MemoryIdentityCache.class); @@ -53,23 +50,16 @@ public class MemoryIdentityCache implements IdentityCache, IdentityMapper, Manag private long maxCacheItems = 10000L; - private IdentityMapper identityMapper; - private final Bus bus; - - private MemoryIdentityCacheStatistics statistics; - - protected MemoryIdentityCache() { - this.bus = null; + super(null, null); } public MemoryIdentityCache(IdentityMapper identityMapper) { - this.identityMapper = identityMapper; - this.bus = null; + super(null, identityMapper); } + public MemoryIdentityCache(Bus bus, IdentityMapper identityMapper) { - this.identityMapper = identityMapper; - this.bus = bus; + super(bus, identityMapper); if (bus != null) { InstrumentationManager im = bus.getExtension(InstrumentationManager.class); if (im != null) { @@ -82,17 +72,6 @@ public class MemoryIdentityCache implements IdentityCache, IdentityMapper, Manag } } - public MemoryIdentityCacheStatistics getStatistics() { - if (statistics == null) { - this.statistics = new MemoryIdentityCacheStatistics(bus, this); - } - return statistics; - } - - public void setStatistics(MemoryIdentityCacheStatistics stats) { - this.statistics = stats; - } - public long getMaxCacheItems() { return maxCacheItems; } @@ -137,84 +116,13 @@ public class MemoryIdentityCache implements IdentityCache, IdentityMapper, Manag return this.cache.toString(); } - @Override - public Principal mapPrincipal(String sourceRealm, - Principal sourcePrincipal, String targetRealm) { - - Principal targetPrincipal = null; - Map<String, String> identities = this.get(sourcePrincipal.getName(), sourceRealm); - if (identities != null) { - if (LOG.isLoggable(Level.FINE)) { - LOG.fine("Identities found for '" + sourcePrincipal.getName() + "@" + sourceRealm + "'"); - } - // Identities object found for key sourceUser@sourceRealm - String targetUser = identities.get(targetRealm); - if (targetUser == null) { - getStatistics().increaseCacheMiss(); - if (LOG.isLoggable(Level.FINE)) { - LOG.fine("No mapping found for realm " + targetRealm + " of user '" - + sourcePrincipal.getName() + "@" + sourceRealm + "'"); - } - // User identity of target realm not cached yet - targetPrincipal = this.identityMapper.mapPrincipal( - sourceRealm, sourcePrincipal, targetRealm); - // Add the identity for target realm to the cached entry - identities.put(targetRealm, targetPrincipal.getName()); - - // Verify whether target user has cached some identities already - Map<String, String> cachedItem = this.get(targetPrincipal.getName(), targetRealm); - if (cachedItem != null) { - if (LOG.isLoggable(Level.FINE)) { - LOG.fine("Merging mappings for '" + sourcePrincipal.getName() + "@" + sourceRealm + "'"); - } - //Identites already cached for targetUser@targetRealm key pair - //Merge into identities object - this.mergeMap(identities, cachedItem); - } - this.add(targetPrincipal.getName(), targetRealm, identities); - } else { - getStatistics().increaseCacheHit(); - if (LOG.isLoggable(Level.INFO)) { - LOG.info("Mapping '" + sourcePrincipal.getName() + "@" + sourceRealm + "' to '" - + targetUser + "@" + targetRealm + "' cached"); - } - targetPrincipal = new CustomTokenPrincipal(targetUser); - } - - } else { - if (LOG.isLoggable(Level.FINE)) { - LOG.fine("No mapping found for realm " + targetRealm + " of user '" - + sourcePrincipal.getName() + "@" + sourceRealm + "'"); - } - getStatistics().increaseCacheMiss(); - - // Identities object NOT found for key sourceUser@sourceRealm - targetPrincipal = this.identityMapper.mapPrincipal( - sourceRealm, sourcePrincipal, targetRealm); - identities = new HashMap<>(); - identities.put(sourceRealm, sourcePrincipal.getName()); - identities.put(targetRealm, targetPrincipal.getName()); - this.add(targetPrincipal.getName(), targetRealm, identities); - this.add(sourcePrincipal.getName(), sourceRealm, identities); - } - return targetPrincipal; - } - - - - private void mergeMap(Map<String, String> to, Map<String, String> from) { - for (String key : from.keySet()) { - to.put(key, from.get(key)); - } - for (String key : to.keySet()) { - from.put(key, to.get(key)); - } - } - public ObjectName getObjectName() throws JMException { StringBuilder buffer = new StringBuilder(); buffer.append(ManagementConstants.DEFAULT_DOMAIN_NAME).append(':'); - buffer.append(ManagementConstants.BUS_ID_PROP).append('=').append(bus.getId()).append(','); + if (super.getBus() != null) { + buffer.append( + ManagementConstants.BUS_ID_PROP).append('=').append(super.getBus().getId()).append(','); + } buffer.append(ManagementConstants.TYPE_PROP).append('=').append("MemoryIdentityCache").append(','); buffer.append(ManagementConstants.NAME_PROP).append('=') .append("MemoryIdentityCache-" + System.identityHashCode(this)); http://git-wip-us.apache.org/repos/asf/cxf/blob/591e5d9c/testutils/src/main/java/org/apache/cxf/testutil/common/TestUtil.java ---------------------------------------------------------------------- diff --git a/testutils/src/main/java/org/apache/cxf/testutil/common/TestUtil.java b/testutils/src/main/java/org/apache/cxf/testutil/common/TestUtil.java index 98b39cf..f21675e 100644 --- a/testutils/src/main/java/org/apache/cxf/testutil/common/TestUtil.java +++ b/testutils/src/main/java/org/apache/cxf/testutil/common/TestUtil.java @@ -79,10 +79,12 @@ public final class TestUtil { public static boolean deleteDir(File dir) { if (dir.isDirectory()) { String[] children = dir.list(); - for (int i = 0; i < children.length; i++) { - boolean success = deleteDir(new File(dir, children[i])); - if (!success) { - return false; + if (children != null) { + for (int i = 0; i < children.length; i++) { + boolean success = deleteDir(new File(dir, children[i])); + if (!success) { + return false; + } } } }
