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.");
         }
 
     }


Reply via email to