Browse Source

SEC-152: Strategy pattern for SecurityContextHoldder.

Ben Alex 19 years ago
parent
commit
81603832be

+ 59 - 0
core/src/main/java/org/acegisecurity/context/GlobalSecurityContextHolderStrategy.java

@@ -0,0 +1,59 @@
+/* Copyright 2004, 2005, 2006 Acegi Technology Pty Limited
+ *
+ * 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.acegisecurity.context;
+
+import org.springframework.util.Assert;
+
+
+/**
+ * A <code>static</code> field-based implementation of {@link
+ * org.acegisecurity.context.SecurityContextHolderStrategy}.
+ * 
+ * <p>
+ * This means that all instances in the JVM share the same
+ * <code>SecurityContext</code>. This is generally useful with rich clients,
+ * such as Swing.
+ * </p>
+ *
+ * @author Ben Alex
+ * @version $Id: SecurityContextHolder.java 1324 2006-02-12 06:29:53Z benalex $
+ */
+public class GlobalSecurityContextHolderStrategy
+    implements SecurityContextHolderStrategy {
+    //~ Static fields/initializers =============================================
+
+    private static SecurityContext contextHolder;
+
+    //~ Methods ================================================================
+
+    public void clearContext() {
+        contextHolder = null;
+    }
+
+    public SecurityContext getContext() {
+        if (contextHolder == null) {
+            contextHolder = new SecurityContextImpl();
+        }
+
+        return contextHolder;
+    }
+
+    public void setContext(SecurityContext context) {
+        Assert.notNull(context,
+            "Only non-null SecurityContext instances are permitted");
+        contextHolder = context;
+    }
+}

+ 55 - 0
core/src/main/java/org/acegisecurity/context/InheritableThreadLocalSecurityContextHolderStrategy.java

@@ -0,0 +1,55 @@
+/* Copyright 2004, 2005, 2006 Acegi Technology Pty Limited
+ *
+ * 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.acegisecurity.context;
+
+import org.springframework.util.Assert;
+
+
+/**
+ * An <code>InheritableThreadLocal</code>-based implementation of {@link
+ * org.acegisecurity.context.SecurityContextHolderStrategy}.
+ *
+ * @author Ben Alex
+ * @version $Id: SecurityContextHolder.java 1324 2006-02-12 06:29:53Z benalex $
+ *
+ * @see java.lang.ThreadLocal
+ * @see org.acegisecurity.context.HttpSessionContextIntegrationFilter
+ */
+public class InheritableThreadLocalSecurityContextHolderStrategy implements SecurityContextHolderStrategy {
+    //~ Static fields/initializers =============================================
+
+    private static ThreadLocal contextHolder = new InheritableThreadLocal();
+
+    //~ Methods ================================================================
+
+    public void clearContext() {
+        contextHolder.set(null);
+    }
+
+    public SecurityContext getContext() {
+        if (contextHolder.get() == null) {
+            contextHolder.set(new SecurityContextImpl());
+        }
+
+        return (SecurityContext) contextHolder.get();
+    }
+
+    public void setContext(SecurityContext context) {
+        Assert.notNull(context,
+            "Only non-null SecurityContext instances are permitted");
+        contextHolder.set(context);
+    }
+}

+ 55 - 0
core/src/main/java/org/acegisecurity/context/ThreadLocalSecurityContextHolderStrategy.java

@@ -0,0 +1,55 @@
+/* Copyright 2004, 2005, 2006 Acegi Technology Pty Limited
+ *
+ * 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.acegisecurity.context;
+
+import org.springframework.util.Assert;
+
+
+/**
+ * A <code>ThreadLocal</code>-based implementation of {@link
+ * org.acegisecurity.context.SecurityContextHolderStrategy}.
+ *
+ * @author Ben Alex
+ * @version $Id: SecurityContextHolder.java 1324 2006-02-12 06:29:53Z benalex $
+ *
+ * @see java.lang.ThreadLocal
+ * @see org.acegisecurity.context.HttpSessionContextIntegrationFilter
+ */
+public class ThreadLocalSecurityContextHolderStrategy implements SecurityContextHolderStrategy {
+    //~ Static fields/initializers =============================================
+
+    private static ThreadLocal contextHolder = new ThreadLocal();
+
+    //~ Methods ================================================================
+
+    public void clearContext() {
+        contextHolder.set(null);
+    }
+
+    public SecurityContext getContext() {
+        if (contextHolder.get() == null) {
+            contextHolder.set(new SecurityContextImpl());
+        }
+
+        return (SecurityContext) contextHolder.get();
+    }
+
+    public void setContext(SecurityContext context) {
+        Assert.notNull(context,
+            "Only non-null SecurityContext instances are permitted");
+        contextHolder.set(context);
+    }
+}