Spring Security Remoting provides security services for remote method invocation in distributed Spring applications including RMI context propagation, HTTP invoker authentication, and DNS resolution utilities.
npx @tessl/cli install tessl/maven-org-springframework-security--spring-security-remoting@5.8.0Spring Security Remoting provides security services for remote method invocation in distributed Spring applications. It includes support for RMI context propagation, HTTP invoker authentication, and DNS resolution utilities that maintain security context across remote calls.
Deprecation Notice: All APIs in this module are deprecated as of Spring Security 5.6.0 with no replacement and will be removed in future versions.
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-remoting</artifactId>
<version>5.8.16</version>
</dependency>// DNS resolution
import org.springframework.security.remoting.dns.DnsResolver;
import org.springframework.security.remoting.dns.JndiDnsResolver;
import org.springframework.security.remoting.dns.InitialContextFactory;
import org.springframework.security.remoting.dns.DnsLookupException;
import org.springframework.security.remoting.dns.DnsEntryNotFoundException;
// HTTP invoker authentication
import org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor;
import org.springframework.security.authentication.AuthenticationTrustResolver;
// RMI context propagation
import org.springframework.security.remoting.rmi.ContextPropagatingRemoteInvocationFactory;
import org.springframework.security.remoting.rmi.ContextPropagatingRemoteInvocation;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;Required framework imports for DNS resolution:
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;import org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean;
import org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor;
// Configure HTTP invoker with authentication
HttpInvokerProxyFactoryBean proxy = new HttpInvokerProxyFactoryBean();
proxy.setServiceUrl("http://localhost:8080/remoting/MyService");
proxy.setServiceInterface(MyService.class);
// Add authentication support
AuthenticationSimpleHttpInvokerRequestExecutor executor =
new AuthenticationSimpleHttpInvokerRequestExecutor();
proxy.setHttpInvokerRequestExecutor(executor);
MyService service = (MyService) proxy.getObject();import org.springframework.remoting.rmi.RmiProxyFactoryBean;
import org.springframework.security.remoting.rmi.ContextPropagatingRemoteInvocationFactory;
// Configure RMI proxy with security context propagation
RmiProxyFactoryBean proxy = new RmiProxyFactoryBean();
proxy.setServiceUrl("rmi://localhost:1099/MyService");
proxy.setServiceInterface(MyService.class);
proxy.setRefreshStubOnConnectFailure(true);
// Add security context propagation
ContextPropagatingRemoteInvocationFactory factory =
new ContextPropagatingRemoteInvocationFactory();
proxy.setRemoteInvocationFactory(factory);
MyService service = (MyService) proxy.getObject();Spring Security Remoting extends Spring Framework's remoting capabilities to support security context propagation across distributed applications:
DNS resolution utilities for service discovery in distributed environments, supporting both A record and SRV record lookups with JNDI-based implementation.
public interface DnsResolver {
String resolveIpAddress(String hostname) throws DnsEntryNotFoundException, DnsLookupException;
String resolveServiceEntry(String serviceType, String domain) throws DnsEntryNotFoundException, DnsLookupException;
String resolveServiceIpAddress(String serviceType, String domain) throws DnsEntryNotFoundException, DnsLookupException;
}
public class JndiDnsResolver implements DnsResolver {
public void setCtxFactory(InitialContextFactory ctxFactory);
public String resolveServiceIpAddressAndPort(String serviceType, String domain);
}BASIC authentication support for Spring's HTTP invoker remoting, automatically using credentials from SecurityContextHolder to authenticate remote method calls.
public class AuthenticationSimpleHttpInvokerRequestExecutor extends SimpleHttpInvokerRequestExecutor {
protected void prepareConnection(HttpURLConnection con, int contentLength) throws IOException;
protected void doPrepareConnection(HttpURLConnection con, int contentLength) throws IOException;
}Security context propagation for RMI remoting, enabling transparent transmission of authentication information from client to server in distributed RMI applications.
public class ContextPropagatingRemoteInvocation extends RemoteInvocation {
public ContextPropagatingRemoteInvocation(MethodInvocation methodInvocation);
public Object invoke(Object targetObject) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException;
protected Authentication createAuthenticationRequest(String principal, String credentials);
}
public class ContextPropagatingRemoteInvocationFactory implements RemoteInvocationFactory {
public RemoteInvocation createRemoteInvocation(MethodInvocation methodInvocation);
}public class DnsLookupException extends RuntimeException {
public DnsLookupException(String msg);
public DnsLookupException(String msg, Throwable cause);
}
public class DnsEntryNotFoundException extends DnsLookupException {
public DnsEntryNotFoundException(String msg);
public DnsEntryNotFoundException(String msg, Throwable cause);
}This module requires the following Spring Framework components:
spring-remoting for HTTP invoker and RMI supportspring-security-core for SecurityContextHolder and Authenticationjavax.naming) for DNS resolution