Cleanup Session management and timeout
[java-idp.git] / src / edu / internet2 / middleware / shibboleth / serviceprovider / ServiceProviderContext.java
index 4c53f25..99e1ecd 100644 (file)
@@ -1,4 +1,20 @@
 /*
+ * Copyright [2005] [University Corporation for Advanced Internet Development, Inc.]
+ *
+ * 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.
+ */
+
+/*
  * ServiceProviderContext.java
  * 
  * There is one ServiceProviderContext per Service Provider.
  * Any change to this strategy can be propagated to all other classes
  * just by changing the getInstance() method implementation to use 
  * a different factory or lookup service.
- * 
- * --------------------
- * Copyright 2002, 2004 
- * University Corporation for Advanced Internet Development, Inc. 
- * All rights reserved
- * [Thats all we have to say to protect ourselves]
- * Your permission to use this code is governed by "The Shibboleth License".
- * A copy may be found at http://shibboleth.internet2.edu/license.html
- * [Nothing in copyright law requires license text in every file.]
  */
 package edu.internet2.middleware.shibboleth.serviceprovider;
 
+import org.opensaml.NoSuchProviderException;
+import org.opensaml.ReplayCache;
+import org.opensaml.ReplayCacheFactory;
+
 /**
  * Unique object through which all Service Provider objects and collections
  * are found. Obtain a reference to this object by calling the static
@@ -50,7 +61,7 @@ public class ServiceProviderContext {
         * indirectly by creating this first new object of type
         * ServiceProviderContext() there is some code that calls
         * back to getServiceProviderContext() then it will get back
-        * a null from that call. This is because the targetContext
+        * a null from that call. This is because the SPContext
         * variable is not filled in with a reference to the object 
         * until it is constructed, and we are still in the middle of
         * constructing it.  
@@ -99,7 +110,8 @@ public class ServiceProviderContext {
         * wanted to load and configure the Session Manager in Spring.
         */
        private SessionManager sessionManager = null;
-       
+
+       private ReplayCache replayCache = null;
        
        private ThreadLocal requestContext = new ThreadLocal();
                public void setRequestContext(RequestTracker trk) {
@@ -114,19 +126,33 @@ public class ServiceProviderContext {
         */
        private ServiceProviderContext() {
        }
+    
+    public void initialize() {
+        // Post-construction initialization of elements that require
+        // a reference back to the context.
+        sessionManager = new SessionManager();
+    }
        
        
        
        // property accessor methods
 
        public SessionManager getSessionManager() {
-           // deferred allocation, since sessionManger needs a reference
-           // back to context.
-           if (sessionManager==null)
-                   sessionManager = new SessionManager();
                return sessionManager;
        }
 
+    // TODO: Make this pluggable / configurable
+    public synchronized ReplayCache getReplayCache() {
+        if (replayCache == null) {
+            try {
+                replayCache = ReplayCacheFactory.getInstance();
+            }
+            catch (NoSuchProviderException e) {
+            }
+        }
+        return replayCache;
+    }
+    
        public ServiceProviderConfig getServiceProviderConfig() {
                return serviceProviderConfig;
        }