remoting/src/main/java/org/springframework/security/remoting/rmi/ContextPropagatingRemoteInvocation.java
public Object invoke(Object targetObject) throws NoSuchMethodException,
			IllegalAccessException, InvocationTargetException {

		if (principal != null) {
			Authentication request = createAuthenticationRequest(principal, credentials);
			request.setAuthenticated(false);
			SecurityContextHolder.getContext().setAuthentication(request);

			if (logger.isDebugEnabled()) {
				logger.debug("Set SecurityContextHolder to contain: " + request);
			}
		}

		try {
			return super.invoke(targetObject);
		}
		finally {
			SecurityContextHolder.clearContext();

			if (logger.isDebugEnabled()) {
				logger.debug("Cleared SecurityContextHolder.");
			}
		}
	}
public Object invoke(Object targetObject) throws NoSuchMethodException,
			IllegalAccessException, InvocationTargetException {

		if (principal != null) {
			Authentication request = createAuthenticationRequest(principal, credentials);
			request.setAuthenticated(false);
			SecurityContextHolder.getContext().setAuthentication(request);

			if (logger.isDebugEnabled()) {
				logger.debug("Set SecurityContextHolder to contain: " + request);
			}
		}

		try {
			return super.invoke(targetObject);
		}
		finally {
			SecurityContextHolder.clearContext();

			if (logger.isDebugEnabled()) {
				logger.debug("Cleared SecurityContextHolder.");
			}
		}
	}
Invoked on the server-side.
<p>
The transmitted principal and credentials will be used to create an unauthenticated
{@code Authentication} instance for processing by the {@code AuthenticationManager}.

@param targetObject the target object to apply the invocation to

@return the invocation result

@throws NoSuchMethodException if the method name could not be resolved
@throws IllegalAccessException if the method could not be accessed
@throws InvocationTargetException if the method invocation resulted in an exception