AcegiRemoteInvocation support, thanks to James Monaghan.

This commit is contained in:
Ben Alex 2004-09-16 06:20:26 +00:00
parent e4c8ee0689
commit c2491a93b4
4 changed files with 119 additions and 1 deletions

View File

@ -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).

View File

@ -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;
}
}

View File

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

View File

@ -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>