Browse Source

AcegiRemoteInvocation support, thanks to James Monaghan.

Ben Alex 21 years ago
parent
commit
c2491a93b4

+ 3 - 1
contributors.txt

@@ -32,7 +32,9 @@ contributions to the Acegi Security System for Spring project:
 
 * Karel Miarka contributed a fix for EH-CACHE NPEs, additional event
   handling for DaoAuthenticationProvider, and the 
-  PasswordAuthenticationProvider-related classes
+  PasswordAuthenticationProvider-related (including LDAP DAO) classes.
+
+* James Monaghan contributed the AcegiRemoteInvocation support classes.
 
 * Anyone else I've forgotten (please let me know so I can correct this).
 

+ 58 - 0
sandbox/src/main/java/org/acegisecurity/remoting/AcegiRemoteInvocation.java

@@ -0,0 +1,58 @@
+/* Copyright 2004 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 net.sf.acegisecurity.remoting;
+
+import net.sf.acegisecurity.context.Context;
+import net.sf.acegisecurity.context.ContextHolder;
+
+import org.aopalliance.intercept.MethodInvocation;
+
+import org.springframework.remoting.support.RemoteInvocation;
+
+import java.lang.reflect.InvocationTargetException;
+
+
+/**
+ * DOCUMENT ME!
+ *
+ * @author James Monaghan
+ * @version $Id$
+ */
+public class AcegiRemoteInvocation extends RemoteInvocation {
+    //~ Instance fields ========================================================
+
+    private Context context;
+
+    //~ Constructors ===========================================================
+
+    public AcegiRemoteInvocation(MethodInvocation methodInvocation) {
+        super(methodInvocation);
+        context = ContextHolder.getContext();
+    }
+
+    //~ Methods ================================================================
+
+    public Object invoke(Object targetObject)
+        throws NoSuchMethodException, IllegalAccessException, 
+            InvocationTargetException {
+        ContextHolder.setContext(context);
+
+        Object result = super.invoke(targetObject);
+        ContextHolder.setContext(null);
+
+        return result;
+    }
+}

+ 37 - 0
sandbox/src/main/java/org/acegisecurity/remoting/AcegiRemoteInvocationFactory.java

@@ -0,0 +1,37 @@
+/* Copyright 2004 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 net.sf.acegisecurity.remoting;
+
+import org.aopalliance.intercept.MethodInvocation;
+
+import org.springframework.remoting.support.RemoteInvocation;
+import org.springframework.remoting.support.RemoteInvocationFactory;
+
+
+/**
+ * DOCUMENT ME!
+ *
+ * @author James Monaghan
+ * @version $Id$
+ */
+public class AcegiRemoteInvocationFactory implements RemoteInvocationFactory {
+    //~ Methods ================================================================
+
+    public RemoteInvocation createRemoteInvocation(
+        MethodInvocation methodInvocation) {
+        return new AcegiRemoteInvocation(methodInvocation);
+    }
+}

+ 21 - 0
sandbox/src/main/java/org/acegisecurity/remoting/package.html

@@ -0,0 +1,21 @@
+<html>
+<body>
+Enables use of Spring's remoting extension points to propogate
+security identity from one JVM to the remote JVM.
+
+<P>The beans are wired as follows:
+
+<P>
+<code>
+&lt;bean id="test" class="org.springframework.remoting.rmi.RmiProxyFactoryBean"&gt;<BR>
+   &lt;property name="serviceUrl"&gt;&lt;value&gt;rmi://localhost/Test&lt;/value&gt;&lt;/property&gt;<BR>
+   &lt;property name="serviceInterface"&gt;&lt;value&gt;test.TargetInterface&lt;/value&gt;&lt;/property&gt;<BR>
+   &lt;property name="refreshStubOnConnectFailure"&gt;&lt;value&gt;true&lt;/value&gt;&lt;/property&gt;<BR>
+   &lt;property name="remoteInvocationFactory"&gt;&lt;ref bean="remoteInvocationFactory"/&gt;&lt;/property&gt;<BR>
+&lt;/bean&gt;<BR>
+<BR>
+&lt;bean id="remoteInvocationFactory" class="net.sf.acegisecurity.remoting.AcegiRemoteInvocationFactory"/&gt;<BR>
+</code>
+
+</body>
+</html>