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); + }