Author: shankar
Date: Thu Jan  6 10:28:05 2011
New Revision: 1055819

URL: http://svn.apache.org/viewvc?rev=1055819&view=rev
Log:
Applying patch from RAMPART-298

Modified:
    
axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/RampartEngine.java
    
axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/TokenCallbackHandler.java
    
axis/axis2/java/rampart/trunk/modules/rampart-trust/src/main/java/org/apache/rahas/SimpleTokenStore.java
    
axis/axis2/java/rampart/trunk/modules/rampart-trust/src/main/java/org/apache/rahas/TokenStorage.java

Modified: 
axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/RampartEngine.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/RampartEngine.java?rev=1055819&r1=1055818&r2=1055819&view=diff
==============================================================================
--- 
axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/RampartEngine.java
 (original)
+++ 
axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/RampartEngine.java
 Thu Jan  6 10:28:05 2011
@@ -148,6 +148,14 @@ public class RampartEngine {
                                        signatureCrypto, 
                                                
RampartUtil.getEncryptionCrypto(rpd.getRampartConfig(), 
                                                        
msgCtx.getAxisService().getClassLoader()));
+
+            // Remove encryption tokens if this is the initiator and if 
initiator is receiving a message
+
+            if (rmd.isInitiator() && (msgCtx.getFLOW() == 
MessageContext.IN_FLOW ||
+                    msgCtx.getFLOW() == MessageContext.IN_FAULT_FLOW)) {
+                tokenCallbackHandler.removeEncryptedToken();
+            }
+
                } else {
                        if(doDebug){
                                log.debug("Processing security header in normal 
path");

Modified: 
axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/TokenCallbackHandler.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/TokenCallbackHandler.java?rev=1055819&r1=1055818&r2=1055819&view=diff
==============================================================================
--- 
axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/TokenCallbackHandler.java
 (original)
+++ 
axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/TokenCallbackHandler.java
 Thu Jan  6 10:28:05 2011
@@ -34,15 +34,19 @@ public class TokenCallbackHandler implem
 
     private TokenStorage store;
     private CallbackHandler handler;
-    
+    private String tokenIdentifier;
+
     public TokenCallbackHandler(TokenStorage store, CallbackHandler handler) {
         this.store = store;
         this.handler = handler;
+        this.tokenIdentifier = null;
     }
+
+
     
     public void handle(Callback[] callbacks) 
     throws IOException, UnsupportedCallbackException {
-        
+
         for (int i = 0; i < callbacks.length; i++) {
 
             if (callbacks[i] instanceof WSPasswordCallback) {
@@ -67,8 +71,10 @@ public class TokenCallbackHandler implem
                     }
                 } else if (pc.getUsage() == 
WSPasswordCallback.ENCRYPTED_KEY_TOKEN){
                        try {
-                               String[] tokenIdentifiers = 
this.store.getTokenIdentifiers();
+
+                        String[] tokenIdentifiers = 
this.store.getTokenIdentifiers();
                                Token tok;
+
                                for (int j = 0 ; j < tokenIdentifiers.length ; 
j++) {
                                        
                                                tok = 
this.store.getToken(tokenIdentifiers[j]);
@@ -77,6 +83,8 @@ public class TokenCallbackHandler implem
                                                                
((EncryptedKeyToken)tok).getSHA1().equals(id)){                                 
                        
                                                    pc.setKey(tok.getSecret());
                                                    
pc.setCustomToken((Element)tok.getToken());
+
+                                    tokenIdentifier = tokenIdentifiers[j];
                                                }
                                }
                                
@@ -97,6 +105,14 @@ public class TokenCallbackHandler implem
             }
         }
     }
+
+    public void removeEncryptedToken() {
+
+        if (tokenIdentifier != null) {
+            this.store.removeToken(tokenIdentifier);
+        }
+
+    }
     
 
 

Modified: 
axis/axis2/java/rampart/trunk/modules/rampart-trust/src/main/java/org/apache/rahas/SimpleTokenStore.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/rampart/trunk/modules/rampart-trust/src/main/java/org/apache/rahas/SimpleTokenStore.java?rev=1055819&r1=1055818&r2=1055819&view=diff
==============================================================================
--- 
axis/axis2/java/rampart/trunk/modules/rampart-trust/src/main/java/org/apache/rahas/SimpleTokenStore.java
 (original)
+++ 
axis/axis2/java/rampart/trunk/modules/rampart-trust/src/main/java/org/apache/rahas/SimpleTokenStore.java
 Thu Jan  6 10:28:05 2011
@@ -191,6 +191,17 @@ public class SimpleTokenStore implements
         return token;
     }
 
+    public void removeToken(String id){
+
+        writeLock.lock();
+
+        try {
+            this.tokens.remove(id);
+        } finally {
+            writeLock.unlock();
+        }        
+    }
+    
     protected void processTokenExpiry() throws TrustException {
         
         readLock.lock();
@@ -228,6 +239,4 @@ public class SimpleTokenStore implements
         }
     }
     
-    
-    
 }

Modified: 
axis/axis2/java/rampart/trunk/modules/rampart-trust/src/main/java/org/apache/rahas/TokenStorage.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/rampart/trunk/modules/rampart-trust/src/main/java/org/apache/rahas/TokenStorage.java?rev=1055819&r1=1055818&r2=1055819&view=diff
==============================================================================
--- 
axis/axis2/java/rampart/trunk/modules/rampart-trust/src/main/java/org/apache/rahas/TokenStorage.java
 (original)
+++ 
axis/axis2/java/rampart/trunk/modules/rampart-trust/src/main/java/org/apache/rahas/TokenStorage.java
 Thu Jan  6 10:28:05 2011
@@ -83,5 +83,11 @@ public interface TokenStorage {
      * @throws TrustException
      */
     Token getToken(String id) throws TrustException;
-    
+
+    /**
+     * Removes the given token from token storage.
+     * @param id Token id to remove.
+     */
+    void removeToken(String id);
+
 }


Reply via email to