Author: thilinamb
Date: Tue Feb 15 12:23:02 2011
New Revision: 1070864
URL: http://svn.apache.org/viewvc?rev=1070864&view=rev
Log:
Enabling crypto caching by default when Merlin is used as the Crypto
implementation. Old parameters used to enable crypto caching are still valid.
If someone wants to disable crypto caching, it can be done by setting the value
of attribute 'enableCryptoCaching' to false. (This new attribute needs to
included to the documentation)
Modified:
axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/RampartConstants.java
axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/policy/builders/CryptoConfigBuilder.java
axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/policy/model/CryptoConfig.java
axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/util/RampartUtil.java
Modified:
axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/RampartConstants.java
URL:
http://svn.apache.org/viewvc/axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/RampartConstants.java?rev=1070864&r1=1070863&r2=1070864&view=diff
==============================================================================
---
axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/RampartConstants.java
(original)
+++
axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/RampartConstants.java
Tue Feb 15 12:23:02 2011
@@ -5,5 +5,6 @@ public class RampartConstants {
public static final String TIME_LOG = "org.apache.rampart.TIME";
public static final String MESSAGE_LOG = "org.apache.rampart.MESSAGE";
public static final String SEC_FAULT = "SECURITY_VALIDATION_FAILURE";
-
+ public static final String MERLIN_CRYPTO_IMPL =
"org.apache.ws.security.components.crypto.Merlin";
+ public static final String MERLIN_CRYPTO_IMPL_CACHE_KEY =
"org.apache.ws.security.crypto.merlin.file";
}
Modified:
axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/policy/builders/CryptoConfigBuilder.java
URL:
http://svn.apache.org/viewvc/axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/policy/builders/CryptoConfigBuilder.java?rev=1070864&r1=1070863&r2=1070864&view=diff
==============================================================================
---
axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/policy/builders/CryptoConfigBuilder.java
(original)
+++
axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/policy/builders/CryptoConfigBuilder.java
Tue Feb 15 12:23:02 2011
@@ -47,6 +47,12 @@ public class CryptoConfigBuilder impleme
if(cacheRefreshIntAttr != null){
cryptoCofig.setCacheRefreshInterval(cacheRefreshIntAttr.getAttributeValue().trim());
}
+
+ OMAttribute enableCryptoCacheAttr = element.getAttribute(new
QName(CryptoConfig.CACHE_ENABLED));
+ if(enableCryptoCacheAttr != null){
+
cryptoCofig.setCacheEnabled(Boolean.parseBoolean(enableCryptoCacheAttr.
+ getAttributeValue().trim().toLowerCase()));
+ }
Properties properties = new Properties();
Modified:
axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/policy/model/CryptoConfig.java
URL:
http://svn.apache.org/viewvc/axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/policy/model/CryptoConfig.java?rev=1070864&r1=1070863&r2=1070864&view=diff
==============================================================================
---
axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/policy/model/CryptoConfig.java
(original)
+++
axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/policy/model/CryptoConfig.java
Tue Feb 15 12:23:02 2011
@@ -47,6 +47,11 @@ public class CryptoConfig implements Ass
public final static String PROPERTY_NAME_ATTR = "name";
public final static String CRYPTO_KEY_ATTR = "cryptoKey";
public final static String CACHE_REFRESH_INTVL = "cacheRefreshInterval";
+ public static final String CACHE_ENABLED = "enableCryptoCaching";
+
+ private Properties prop;
+
+ private boolean cacheEnabled = true;
private String provider;
private String cryptoKey;
@@ -68,17 +73,18 @@ public class CryptoConfig implements Ass
this.cacheRefreshInterval = cacheRefreshInterval;
}
- private Properties prop;
-
public Properties getProp() {
return prop;
}
+
public void setProp(Properties prop) {
this.prop = prop;
}
+
public String getProvider() {
return provider;
}
+
public void setProvider(String provider) {
this.provider = provider;
}
@@ -97,6 +103,14 @@ public class CryptoConfig implements Ass
throw new UnsupportedOperationException("TODO");
}
+ public boolean isCacheEnabled() {
+ return cacheEnabled;
+ }
+
+ public void setCacheEnabled(boolean cacheEnabled) {
+ this.cacheEnabled = cacheEnabled;
+ }
+
public void serialize(XMLStreamWriter writer) throws XMLStreamException {
String prefix = writer.getPrefix(RampartConfig.NS);
@@ -119,7 +133,9 @@ public class CryptoConfig implements Ass
writer.writeAttribute(CACHE_REFRESH_INTVL,
getCacheRefreshInterval());
}
-
+ if(!isCacheEnabled()){
+ writer.writeAttribute(CACHE_ENABLED,
Boolean.toString(isCacheEnabled()));
+ }
String key;
String value;
Modified:
axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/util/RampartUtil.java
URL:
http://svn.apache.org/viewvc/axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/util/RampartUtil.java?rev=1070864&r1=1070863&r2=1070864&view=diff
==============================================================================
---
axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/util/RampartUtil.java
(original)
+++
axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/util/RampartUtil.java
Tue Feb 15 12:23:02 2011
@@ -49,6 +49,7 @@ import org.apache.rahas.client.STSClient
import org.apache.rampart.PolicyBasedResultsValidator;
import org.apache.rampart.PolicyValidatorCallbackHandler;
import org.apache.rampart.RampartConfigCallbackHandler;
+import org.apache.rampart.RampartConstants;
import org.apache.rampart.RampartException;
import org.apache.rampart.RampartMessageData;
import org.apache.rampart.policy.RampartPolicyData;
@@ -90,13 +91,14 @@ import javax.servlet.http.HttpServletReq
import java.security.NoSuchAlgorithmException;
import java.security.cert.X509Certificate;
import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
public class RampartUtil {
private static final String CRYPTO_PROVIDER =
"org.apache.ws.security.crypto.provider";
private static Log log = LogFactory.getLog(RampartUtil.class);
- private static Map cryptoStore = new Hashtable();
+ private static Map<String, CachedCrypto> cryptoStore = new
ConcurrentHashMap<String, CachedCrypto>();
private static class CachedCrypto {
private Crypto crypto;
@@ -130,9 +132,9 @@ public class RampartUtil {
String cbHandlerClass = rpd.getRampartConfig().getPwCbClass();
ClassLoader classLoader =
msgContext.getAxisService().getClassLoader();
-
+
log.debug("loading class : " + cbHandlerClass);
-
+
Class cbClass;
try {
cbClass = Loader.loadClass(classLoader, cbHandlerClass);
@@ -177,9 +179,9 @@ public class RampartUtil {
String cbHandlerClass =
rpd.getRampartConfig().getPolicyValidatorCbClass();
ClassLoader classLoader =
msgContext.getAxisService().getClassLoader();
-
+
log.debug("loading class : " + cbHandlerClass);
-
+
Class cbClass;
try {
cbClass = Loader.loadClass(classLoader, cbHandlerClass);
@@ -210,9 +212,9 @@ public class RampartUtil {
String cbHandlerClass =
rpd.getRampartConfig().getRampartConfigCbClass();
ClassLoader classLoader =
msgContext.getAxisService().getClassLoader();
-
+
log.debug("loading class : " + cbHandlerClass);
-
+
Class cbClass;
try {
cbClass = Loader.loadClass(classLoader, cbHandlerClass);
@@ -289,76 +291,55 @@ public class RampartUtil {
*/
public static Crypto getEncryptionCrypto(RampartConfig config, ClassLoader
loader)
throws RampartException {
- log.debug("Loading encryption crypto");
-
+
+ if (log.isDebugEnabled()) {
+ log.debug("Loading encryption crypto");
+ }
+
+ Crypto crypto = null;
+
if (config != null && config.getEncrCryptoConfig() != null) {
- CryptoConfig cryptoConfig =
config.getEncrCryptoConfig();
- String provider = cryptoConfig.getProvider();
- log.debug("Usig provider: " + provider);
- Properties prop = cryptoConfig.getProp();
- prop.put(CRYPTO_PROVIDER, provider);
-
- String cryptoKey = null;
- String interval = null;
- if (cryptoConfig.getCryptoKey() != null) {
- cryptoKey =
prop.getProperty(cryptoConfig.getCryptoKey());
- interval =
cryptoConfig.getCacheRefreshInterval();
- }
-
- Crypto crypto = null;
-
- if (cryptoKey != null) {
- // cache enabled
- crypto =
retrieveCrytpoFromCache(cryptoKey.trim() + "#" + provider.trim(), interval);
- }
-
- if (crypto == null) {
- // cache miss
- crypto = CryptoFactory.getInstance(prop,
loader);
- if (cryptoKey != null) {
- // cache enabled - let's cache
- cacheCrypto(cryptoKey.trim() + "#" +
provider.trim(), crypto);
- }
- }
- return crypto;
-
- } else {
- log.debug("Trying the signature crypto info");
-
- // Try using signature crypto information
- if (config != null && config.getSigCryptoConfig() !=
null) {
- CryptoConfig cryptoConfig =
config.getSigCryptoConfig();
- String provider = cryptoConfig.getProvider();
- log.debug("Usig provider: " + provider);
- Properties prop = cryptoConfig.getProp();
- prop.put(CRYPTO_PROVIDER, provider);
- String cryptoKey = null;
- String interval = null;
- if (cryptoConfig.getCryptoKey() != null) {
- cryptoKey =
prop.getProperty(cryptoConfig.getCryptoKey());
- interval =
cryptoConfig.getCacheRefreshInterval();
- }
-
- Crypto crypto = null;
- if (cryptoKey != null) {
- // cache enabled
- crypto =
retrieveCrytpoFromCache(cryptoKey.trim() + "#" + provider.trim(),
- interval);
- }
-
- if (crypto == null) {
- // cache miss
- crypto =
CryptoFactory.getInstance(prop, loader);
- if (cryptoKey != null) {
- // cache enabled - let's cache
- cacheCrypto(cryptoKey.trim() +
"#" + provider.trim(), crypto);
- }
- }
- return crypto;
- } else {
- return null;
- }
- }
+ CryptoConfig cryptoConfig = config.getEncrCryptoConfig();
+ String provider = cryptoConfig.getProvider();
+ if (log.isDebugEnabled()) {
+ log.debug("Using provider: " + provider);
+ }
+ Properties prop = cryptoConfig.getProp();
+ prop.put(CRYPTO_PROVIDER, provider);
+
+ String cryptoKey = null;
+ String interval = null;
+ if (cryptoConfig.isCacheEnabled()) {
+ if (cryptoConfig.getCryptoKey() != null) {
+ cryptoKey = prop.getProperty(cryptoConfig.getCryptoKey());
+ interval = cryptoConfig.getCacheRefreshInterval();
+ }
+ else if(provider.equals(RampartConstants.MERLIN_CRYPTO_IMPL)){
+ cryptoKey =
cryptoConfig.getProp().getProperty(RampartConstants.MERLIN_CRYPTO_IMPL_CACHE_KEY);
+ }
+ }
+
+
+ if (cryptoKey != null) {
+ // Crypto caching is enabled
+ crypto = retrieveCryptoFromCache(cryptoKey.trim() + "#" +
provider.trim(), interval);
+ }
+
+ if (crypto == null) {
+ // cache miss
+ crypto = CryptoFactory.getInstance(prop, loader);
+ if (cryptoKey != null) {
+ // Crypto caching is enabled - cache the Crypto object
+ cacheCrypto(cryptoKey.trim() + "#" + provider.trim(),
crypto);
+ }
+ }
+ } else {
+ if (log.isDebugEnabled()) {
+ log.debug("Trying the signature crypto info");
+ }
+ crypto = getSignatureCrypto(config, loader);
+ }
+ return crypto;
}
/**
@@ -371,42 +352,49 @@ public class RampartUtil {
*/
public static Crypto getSignatureCrypto(RampartConfig config, ClassLoader
loader)
throws RampartException {
- log.debug("Loading Signature crypto");
-
- if (config != null && config.getSigCryptoConfig() != null) {
- CryptoConfig cryptoConfig = config.getSigCryptoConfig();
- String provider = cryptoConfig.getProvider();
- log.debug("Usig provider: " + provider);
- Properties prop = cryptoConfig.getProp();
- prop.put(CRYPTO_PROVIDER, provider);
- String cryptoKey = null;
- String interval = null;
- if (cryptoConfig.getCryptoKey() != null) {
- cryptoKey =
prop.getProperty(cryptoConfig.getCryptoKey());
- interval =
cryptoConfig.getCacheRefreshInterval();
- }
-
- Crypto crypto = null;
-
- if (cryptoKey != null) {
- // cache enabled
- crypto =
retrieveCrytpoFromCache(cryptoKey.trim() + "#" + provider.trim(), interval);
- }
-
- if (crypto == null) {
- // cache miss
- crypto = CryptoFactory.getInstance(prop,
loader);
- if (cryptoKey != null) {
- // cache enabled - let's cache
- cacheCrypto(cryptoKey.trim() + "#" +
provider.trim(), crypto);
- }
- }
-
- return crypto;
-
- } else {
- return null;
- }
+
+ if (log.isDebugEnabled()) {
+ log.debug("Loading Signature crypto");
+ }
+
+ Crypto crypto = null;
+
+ if (config != null && config.getSigCryptoConfig() != null) {
+ CryptoConfig cryptoConfig = config.getSigCryptoConfig();
+ String provider = cryptoConfig.getProvider();
+ if (log.isDebugEnabled()) {
+ log.debug("Using provider: " + provider);
+ }
+ Properties prop = cryptoConfig.getProp();
+ prop.put(CRYPTO_PROVIDER, provider);
+ String cryptoKey = null;
+ String interval = null;
+
+ if (cryptoConfig.isCacheEnabled()) {
+ if (cryptoConfig.getCryptoKey() != null) {
+ cryptoKey = prop.getProperty(cryptoConfig.getCryptoKey());
+ interval = cryptoConfig.getCacheRefreshInterval();
+ }
+ else if(provider.equals(RampartConstants.MERLIN_CRYPTO_IMPL)){
+ cryptoKey =
cryptoConfig.getProp().getProperty(RampartConstants.MERLIN_CRYPTO_IMPL_CACHE_KEY);
+ }
+ }
+
+ if (cryptoKey != null) {
+ // cache enabled
+ crypto = retrieveCryptoFromCache(cryptoKey.trim() + "#" +
provider.trim(), interval);
+ }
+
+ if (crypto == null) {
+ // cache miss
+ crypto = CryptoFactory.getInstance(prop, loader);
+ if (cryptoKey != null) {
+ // cache enabled - let's cache
+ cacheCrypto(cryptoKey.trim() + "#" + provider.trim(),
crypto);
+ }
+ }
+ }
+ return crypto;
}
@@ -644,7 +632,7 @@ public class RampartUtil {
String id = getToken(rmd, rstTemplate,
issuerEprAddress, action, stsPolicy);
-
+
log.debug("SecureConversationToken obtained: id=" + id);
return id;
}
@@ -1730,26 +1718,26 @@ public class RampartUtil {
}
}
- private static Crypto retrieveCrytpoFromCache(String cryptoKey, String
refreshInterval) {
+ private static Crypto retrieveCryptoFromCache(String cryptoKey, String
refreshInterval) {
// cache hit
if (cryptoStore.containsKey(cryptoKey)) {
- CachedCrypto cachedCrypto = (CachedCrypto)
cryptoStore.get(cryptoKey);
+ CachedCrypto cachedCrypto = cryptoStore.get(cryptoKey);
if (refreshInterval != null) {
if (cachedCrypto.creationTime + new
Long(refreshInterval).longValue() > Calendar
.getInstance().getTimeInMillis()) {
if (log.isDebugEnabled()) {
- log.info("Cache Hit : Crypto Object was found in
cache.");
+ log.debug("Cache Hit : Crypto Object was found in
cache.");
}
return cachedCrypto.crypto;
} else {
if (log.isDebugEnabled()) {
- log.info("Cache Miss : Crypto Object found in cache is
expired.");
+ log.debug("Cache Miss : Crypto Object found in cache
is expired.");
}
return null;
}
} else {
if (log.isDebugEnabled()) {
- log.info("Cache Hit : Crypto Object was found in cache.");
+ log.debug("Cache Hit : Crypto Object was found in cache.");
}
return cachedCrypto.crypto;
}
@@ -1757,7 +1745,7 @@ public class RampartUtil {
// cache miss
else {
if (log.isDebugEnabled()) {
- log.info("Cache Miss : Crypto Object was not found in cache.");
+ log.debug("Cache Miss : Crypto Object was not found in
cache.");
}
return null;
}
@@ -1767,7 +1755,7 @@ public class RampartUtil {
cryptoStore.put(cryptoKey, new CachedCrypto(crypto,
Calendar.getInstance()
.getTimeInMillis()));
if (log.isDebugEnabled()) {
- log.info("Crypto object is inserted into the Cache.");
+ log.debug("Crypto object is inserted into the Cache.");
}
}