Author: prabath Date: Wed May 19 10:09:52 2010 New Revision: 946101 URL: http://svn.apache.org/viewvc?rev=946101&view=rev Log: patch for RAMPART-294
Added: axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/AbstractUniqueMessageAttributeCache.java axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/NonceCache.java Modified: axis/axis2/java/rampart/trunk/modules/rampart-trust/src/main/java/org/apache/rahas/errors.properties Added: axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/AbstractUniqueMessageAttributeCache.java URL: http://svn.apache.org/viewvc/axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/AbstractUniqueMessageAttributeCache.java?rev=946101&view=auto ============================================================================== --- axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/AbstractUniqueMessageAttributeCache.java (added) +++ axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/AbstractUniqueMessageAttributeCache.java Wed May 19 10:09:52 2010 @@ -0,0 +1,61 @@ +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed 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.rampart; + +/** + * An abstract class which implements UniqueMessageAttributeCache interface. + */ +public abstract class AbstractUniqueMessageAttributeCache implements UniqueMessageAttributeCache { + + /** + * Maximum lift time of a cached value. If cached value exceeds this value it will be discarded. + */ + private int maximumLifeTimeOfNonce = 60 * 5; + + /** + * Default constructor. + */ + public AbstractUniqueMessageAttributeCache() + { + } + + /** + * Constructor with maximum life time as a parameter. + * @param maxTime Maximum life time in seconds. + */ + public AbstractUniqueMessageAttributeCache(int maxTime) + { + maximumLifeTimeOfNonce = maxTime; + } + + /** + * Sets the maximum life time of a message id. + * @param maxTime Maximum life time in seconds. + */ + public void setMaximumLifeTimeOfAnAttribute(int maxTime) + { + maximumLifeTimeOfNonce = maxTime; + } + + /** + * Gets the maximum life time of a message id. + * @return Gets message id life time in seconds. + */ + public int getMaximumLifeTimeOfAnAttribute() + { + return maximumLifeTimeOfNonce; + } +} Added: axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/NonceCache.java URL: http://svn.apache.org/viewvc/axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/NonceCache.java?rev=946101&view=auto ============================================================================== --- axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/NonceCache.java (added) +++ axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/NonceCache.java Wed May 19 10:09:52 2010 @@ -0,0 +1,155 @@ +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed 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.rampart; + +import java.util.*; +import java.util.concurrent.locks.ReentrantLock; + +/** + * This is a basic implementation of UniqueMessageAttributeCache. In this implementation we will cache incomming + * nonce value for a period of time. The life time can be defined in the services.xml. If not defined + * the default value will be 5 minutes. + */ +public class NonceCache extends AbstractUniqueMessageAttributeCache { + + class Nonce + { + String nonceValue; + String userName; + + public Nonce(String nonce, String user) + { + this.nonceValue = nonce; + this.userName = user; + } + + @Override + public boolean equals(Object another) + { + Nonce otherNonce = (Nonce)another; + if (this.userName.equals(otherNonce.userName)) + { + if (this.nonceValue.equals(otherNonce.nonceValue)) + { + return true; + } + else + { + return false; + } + } + + return false; + } + + @Override + public int hashCode() + { + return (this.userName.hashCode() * 13 + this.nonceValue.hashCode() * 7); + } + } + + private Map<Nonce, Calendar> mapIdNonce = new HashMap<Nonce, Calendar>(); + + private final ReentrantLock lock = new ReentrantLock(); + + public NonceCache() + { + super(); + } + + public NonceCache(int maxLifeTime) + { + super(maxLifeTime); + } + + /** + * @inheritdoc + */ + public void addToCache(String id, String userName) { + + Nonce nonce = new Nonce(id, userName); + Calendar rightNow = Calendar.getInstance(); + + lock.lock(); + try { + mapIdNonce.put(nonce, rightNow); + } finally { + lock.unlock(); + } + + } + + /** + * @inheritdoc + */ + public boolean valueExistsInCache(String id, String userName) { + + lock.lock(); + + try { + clearStaleNonceIds(); + } finally { + lock.unlock(); + } + + Nonce nonce = new Nonce(id, userName); + return mapIdNonce.containsKey(nonce); + } + + /** + * @inheritdoc + */ + public void clearCache() { + + lock.lock(); + try { + mapIdNonce.clear(); + } finally { + lock.unlock(); + } + } + + /** + * This method will clear stale nonce ids from the map. + */ + private void clearStaleNonceIds() + { + Calendar rightNow = Calendar.getInstance(); + + int maxLifeTime = getMaximumLifeTimeOfAnAttribute(); + + rightNow.add(Calendar.SECOND, -(maxLifeTime)); + long timeBeforeMaxLifeTime = rightNow.getTimeInMillis(); + + Iterator iterator = mapIdNonce.entrySet().iterator(); + + while (iterator.hasNext()) { + + Map.Entry pair = (Map.Entry)iterator.next(); + Calendar itemDate = (Calendar)pair.getValue(); + + long itemAddedTime = itemDate.getTimeInMillis(); + + if (timeBeforeMaxLifeTime > itemAddedTime) + { + iterator.remove(); + } + } + + + } +} Modified: axis/axis2/java/rampart/trunk/modules/rampart-trust/src/main/java/org/apache/rahas/errors.properties URL: http://svn.apache.org/viewvc/axis/axis2/java/rampart/trunk/modules/rampart-trust/src/main/java/org/apache/rahas/errors.properties?rev=946101&r1=946100&r2=946101&view=diff ============================================================================== --- axis/axis2/java/rampart/trunk/modules/rampart-trust/src/main/java/org/apache/rahas/errors.properties (original) +++ axis/axis2/java/rampart/trunk/modules/rampart-trust/src/main/java/org/apache/rahas/errors.properties Wed May 19 10:09:52 2010 @@ -85,4 +85,5 @@ tokenNotFound = Token with ID \"{0}\" ca configurationIsNull = Configuration is null errorInCancelingToken = Error occurred while trying to cancel token -errorExtractingTokenId = Error occurred while extracting token id from the Security Token Reference \ No newline at end of file +errorExtractingTokenId = Error occurred while extracting token id from the Security Token Reference +lifeTimeElemMissing = Lifetime element is missing in the RSTR \ No newline at end of file