summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Godfrey <rgodfrey@apache.org>2012-05-16 12:59:07 +0000
committerRobert Godfrey <rgodfrey@apache.org>2012-05-16 12:59:07 +0000
commitdd52dbe495642935a567c50868d5c1f714fb42c5 (patch)
tree3eb666524117c4660cd7323be2422bbe1018bab8
parente7ac384cf17702b59ddae64d55c7438b26fbd0e3 (diff)
downloadqpid-python-dd52dbe495642935a567c50868d5c1f714fb42c5.tar.gz
QPID-3997 : [Java Broker] Refactor code to make all calls to getAuthenticationManager() pass in local socket address
(note that this commit does not actually implement per socket authentication managers) git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1339146 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/handler/ConnectionSecureOkMethodHandler.java2
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/handler/ConnectionStartOkMethodHandler.java2
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/management/JMXManagedObjectRegistry.java7
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQProtocolEngine.java2
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQProtocolSession.java8
-rwxr-xr-xqpid/java/broker/src/main/java/org/apache/qpid/server/protocol/MultiVersionProtocolEngine.java2
-rwxr-xr-xqpid/java/broker/src/main/java/org/apache/qpid/server/protocol/ProtocolEngine_1_0_0.java2
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/ProtocolEngine_1_0_0_SASL.java2
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java14
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/registry/IApplicationRegistry.java19
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/state/AMQStateManager.java24
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerConnectionDelegate.java20
-rw-r--r--qpid/java/broker/src/test/java/org/apache/qpid/server/transport/ServerConnectionMBeanTest.java3
13 files changed, 82 insertions, 25 deletions
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/ConnectionSecureOkMethodHandler.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/ConnectionSecureOkMethodHandler.java
index 2ccf97f17c..ac322c4e8c 100644
--- a/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/ConnectionSecureOkMethodHandler.java
+++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/ConnectionSecureOkMethodHandler.java
@@ -61,7 +61,7 @@ public class ConnectionSecureOkMethodHandler implements StateAwareMethodListener
{
AMQProtocolSession session = stateManager.getProtocolSession();
- AuthenticationManager authMgr = ApplicationRegistry.getInstance().getAuthenticationManager();
+ AuthenticationManager authMgr = stateManager.getAuthenticationManager();
SaslServer ss = session.getSaslServer();
if (ss == null)
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/ConnectionStartOkMethodHandler.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/ConnectionStartOkMethodHandler.java
index 162e4e0215..d9979ed2dc 100644
--- a/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/ConnectionStartOkMethodHandler.java
+++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/ConnectionStartOkMethodHandler.java
@@ -65,7 +65,7 @@ public class ConnectionStartOkMethodHandler implements StateAwareMethodListener<
_logger.info("SASL Mechanism selected: " + body.getMechanism());
_logger.info("Locale selected: " + body.getLocale());
- AuthenticationManager authMgr = ApplicationRegistry.getInstance().getAuthenticationManager();
+ AuthenticationManager authMgr = stateManager.getAuthenticationManager();
SaslServer ss = null;
try
{
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/management/JMXManagedObjectRegistry.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/management/JMXManagedObjectRegistry.java
index 04a5b27991..116f64a8bf 100644
--- a/qpid/java/broker/src/main/java/org/apache/qpid/server/management/JMXManagedObjectRegistry.java
+++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/management/JMXManagedObjectRegistry.java
@@ -54,10 +54,7 @@ import java.io.FileNotFoundException;
import java.io.IOException;
import java.lang.management.ManagementFactory;
import java.lang.reflect.Proxy;
-import java.net.InetAddress;
-import java.net.ServerSocket;
-import java.net.Socket;
-import java.net.UnknownHostException;
+import java.net.*;
import java.rmi.AlreadyBoundException;
import java.rmi.NoSuchObjectException;
import java.rmi.NotBoundException;
@@ -197,7 +194,7 @@ public class JMXManagedObjectRegistry implements ManagedObjectRegistry
//add a JMXAuthenticator implementation the env map to authenticate the RMI based JMX connector server
RMIPasswordAuthenticator rmipa = new RMIPasswordAuthenticator();
- rmipa.setAuthenticationManager(appRegistry.getAuthenticationManager());
+ rmipa.setAuthenticationManager(appRegistry.getAuthenticationManager(new InetSocketAddress(_jmxPortRegistryServer)));
HashMap<String,Object> env = new HashMap<String,Object>();
env.put(JMXConnectorServer.AUTHENTICATOR, rmipa);
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQProtocolEngine.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQProtocolEngine.java
index ae5ede5e82..c0a8f633fd 100644
--- a/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQProtocolEngine.java
+++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQProtocolEngine.java
@@ -389,7 +389,7 @@ public class AMQProtocolEngine implements ServerProtocolEngine, Managable, AMQPr
// This sets the protocol version (and hence framing classes) for this session.
setProtocolVersion(pv);
- String mechanisms = ApplicationRegistry.getInstance().getAuthenticationManager().getMechanisms();
+ String mechanisms = ApplicationRegistry.getInstance().getAuthenticationManager(getLocalAddress()).getMechanisms();
String locales = "en_US";
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQProtocolSession.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQProtocolSession.java
index 6cd5b21f89..f9bee93dbf 100644
--- a/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQProtocolSession.java
+++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQProtocolSession.java
@@ -20,6 +20,7 @@
*/
package org.apache.qpid.server.protocol;
+import java.net.SocketAddress;
import java.util.List;
import javax.security.auth.Subject;
@@ -60,6 +61,13 @@ public interface AMQProtocolSession extends AMQVersionAwareProtocolSession, Auth
long getLastReceivedTime();
+ /**
+ * Return the local socket address for the connection
+ *
+ * @return the socket address
+ */
+ SocketAddress getLocalAddress();
+
public static interface Task
{
public void doTask(AMQProtocolSession session) throws AMQException;
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/MultiVersionProtocolEngine.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/MultiVersionProtocolEngine.java
index 652ffee004..5c92aa95b6 100755
--- a/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/MultiVersionProtocolEngine.java
+++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/MultiVersionProtocolEngine.java
@@ -302,7 +302,7 @@ public class MultiVersionProtocolEngine implements ServerProtocolEngine
public ServerProtocolEngine getProtocolEngine()
{
final ConnectionDelegate connDelegate =
- new org.apache.qpid.server.transport.ServerConnectionDelegate(_appRegistry, _fqdn);
+ new org.apache.qpid.server.transport.ServerConnectionDelegate(_appRegistry, _fqdn, _appRegistry.getAuthenticationManager(getLocalAddress()));
ServerConnection conn = new ServerConnection(_id);
conn.setConnectionDelegate(connDelegate);
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/ProtocolEngine_1_0_0.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/ProtocolEngine_1_0_0.java
index f31ad5052b..045eafeba2 100755
--- a/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/ProtocolEngine_1_0_0.java
+++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/ProtocolEngine_1_0_0.java
@@ -143,7 +143,7 @@ public class ProtocolEngine_1_0_0 implements ServerProtocolEngine, FrameOutputHa
Container container = new Container(_appRegistry.getBrokerId().toString());
- _conn = new ConnectionEndpoint(container,asCallbackHandlerSource(_appRegistry.getAuthenticationManager()));
+ _conn = new ConnectionEndpoint(container,asCallbackHandlerSource(_appRegistry.getAuthenticationManager(getLocalAddress())));
_conn.setConnectionEventListener(new Connection_1_0(_appRegistry));
_conn.setFrameOutputHandler(this);
_conn.setRemoteAddress(_network.getRemoteAddress());
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/ProtocolEngine_1_0_0_SASL.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/ProtocolEngine_1_0_0_SASL.java
index ffd5e750b4..5d03567e03 100644
--- a/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/ProtocolEngine_1_0_0_SASL.java
+++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/ProtocolEngine_1_0_0_SASL.java
@@ -164,7 +164,7 @@ public class ProtocolEngine_1_0_0_SASL implements ServerProtocolEngine, FrameOut
Container container = new Container(_appRegistry.getBrokerId().toString());
_conn = new ConnectionEndpoint(container, asCallbackHandlerSource(ApplicationRegistry.getInstance()
- .getAuthenticationManager()));
+ .getAuthenticationManager(getLocalAddress())));
_conn.setConnectionEventListener(new Connection_1_0(_appRegistry));
_conn.setRemoteAddress(getRemoteAddress());
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java
index 4ed28b965d..36f1953053 100644
--- a/qpid/java/broker/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java
+++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java
@@ -60,6 +60,7 @@ import org.apache.qpid.server.virtualhost.VirtualHostImpl;
import org.apache.qpid.server.virtualhost.VirtualHostRegistry;
import java.net.InetSocketAddress;
+import java.net.SocketAddress;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
@@ -131,11 +132,6 @@ public abstract class ApplicationRegistry implements IApplicationRegistry
_managedObjectRegistry = managedObjectRegistry;
}
- protected void setAuthenticationManager(AuthenticationManager authenticationManager)
- {
- _authenticationManager = authenticationManager;
- }
-
protected void setVirtualHostRegistry(VirtualHostRegistry virtualHostRegistry)
{
_virtualHostRegistry = virtualHostRegistry;
@@ -622,6 +618,14 @@ public abstract class ApplicationRegistry implements IApplicationRegistry
return _authenticationManager;
}
+
+ @Override
+ public AuthenticationManager getAuthenticationManager(SocketAddress address)
+ {
+ return _authenticationManager;
+ }
+
+
public PluginManager getPluginManager()
{
return _pluginManager;
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/registry/IApplicationRegistry.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/registry/IApplicationRegistry.java
index 59bf250590..af2f0d78bc 100644
--- a/qpid/java/broker/src/main/java/org/apache/qpid/server/registry/IApplicationRegistry.java
+++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/registry/IApplicationRegistry.java
@@ -37,6 +37,7 @@ import org.apache.qpid.server.virtualhost.VirtualHost;
import org.apache.qpid.server.virtualhost.VirtualHostRegistry;
import java.net.InetSocketAddress;
+import java.net.SocketAddress;
import java.util.UUID;
public interface IApplicationRegistry extends StatisticsGatherer
@@ -62,8 +63,26 @@ public interface IApplicationRegistry extends StatisticsGatherer
ManagedObjectRegistry getManagedObjectRegistry();
+ /**
+ * Get the default AuthenticationManager
+ *
+ * @deprecated
+ *
+ * @return the AuthenticationManager
+ */
AuthenticationManager getAuthenticationManager();
+ /**
+ * Get the AuthenticationManager for the given socket address
+ *
+ * If no AuthenticationManager has been specifically set for the given address, then use the default
+ * AuthenticationManager
+ *
+ * @param address The (listening) socket address for which the AuthenticationManager is required
+ * @return the AuthenticationManager
+ */
+ AuthenticationManager getAuthenticationManager(SocketAddress address);
+
VirtualHostRegistry getVirtualHostRegistry();
SecurityManager getSecurityManager();
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/state/AMQStateManager.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/state/AMQStateManager.java
index f97b77a4fe..f352bbdd2c 100644
--- a/qpid/java/broker/src/main/java/org/apache/qpid/server/state/AMQStateManager.java
+++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/state/AMQStateManager.java
@@ -32,7 +32,9 @@ import org.apache.qpid.protocol.AMQConstant;
import org.apache.qpid.protocol.AMQMethodEvent;
import org.apache.qpid.protocol.AMQMethodListener;
import org.apache.qpid.server.protocol.AMQProtocolSession;
+import org.apache.qpid.server.registry.IApplicationRegistry;
import org.apache.qpid.server.security.SecurityManager;
+import org.apache.qpid.server.security.auth.manager.AuthenticationManager;
import org.apache.qpid.server.virtualhost.VirtualHostRegistry;
import java.util.concurrent.CopyOnWriteArraySet;
@@ -61,6 +63,18 @@ public class AMQStateManager implements AMQMethodListener
}
+ /**
+ * Get the ApplicationRegistry associated with this AMQStateManager
+ *
+ * returns the application registry associated with the VirtualHostRegistry of the AMQStateManager
+ *
+ * @return the ApplicationRegistry
+ */
+ public IApplicationRegistry getApplicationRegistry()
+ {
+ return _virtualHostRegistry.getApplicationRegistry();
+ }
+
public AMQState getCurrentState()
{
return _currentState;
@@ -142,4 +156,14 @@ public class AMQStateManager implements AMQMethodListener
SecurityManager.setThreadSubject(_protocolSession.getAuthorizedSubject());
return _protocolSession;
}
+
+ /**
+ * Get the AuthenticationManager associated with the ProtocolSession of the AMQStateManager
+ *
+ * @return the AuthenticationManager
+ */
+ public AuthenticationManager getAuthenticationManager()
+ {
+ return getApplicationRegistry().getAuthenticationManager(getProtocolSession().getLocalAddress());
+ }
}
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerConnectionDelegate.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerConnectionDelegate.java
index 0d8036ec3a..a55d50cc54 100644
--- a/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerConnectionDelegate.java
+++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerConnectionDelegate.java
@@ -32,6 +32,7 @@ import org.apache.qpid.server.registry.IApplicationRegistry;
import org.apache.qpid.server.security.SecurityManager;
import org.apache.qpid.server.security.auth.AuthenticationResult;
import org.apache.qpid.server.security.auth.AuthenticationResult.AuthenticationStatus;
+import org.apache.qpid.server.security.auth.manager.AuthenticationManager;
import org.apache.qpid.server.subscription.Subscription_0_10;
import org.apache.qpid.server.virtualhost.State;
import org.apache.qpid.server.virtualhost.VirtualHost;
@@ -58,22 +59,25 @@ public class ServerConnectionDelegate extends ServerDelegate
private final IApplicationRegistry _appRegistry;
private int _maxNoOfChannels;
private Map<String,Object> _clientProperties;
+ private final AuthenticationManager _authManager;
- public ServerConnectionDelegate(IApplicationRegistry appRegistry, String localFQDN)
+ public ServerConnectionDelegate(IApplicationRegistry appRegistry, String localFQDN, AuthenticationManager authManager)
{
- this(createConnectionProperties(appRegistry.getBroker()), Collections.singletonList((Object)"en_US"), appRegistry, localFQDN);
+ this(createConnectionProperties(appRegistry.getBroker()), Collections.singletonList((Object)"en_US"), appRegistry, localFQDN, authManager);
}
- public ServerConnectionDelegate(Map<String, Object> properties,
+ private ServerConnectionDelegate(Map<String, Object> properties,
List<Object> locales,
IApplicationRegistry appRegistry,
- String localFQDN)
+ String localFQDN,
+ AuthenticationManager authManager)
{
- super(properties, parseToList(appRegistry.getAuthenticationManager().getMechanisms()), locales);
+ super(properties, parseToList(authManager.getMechanisms()), locales);
_appRegistry = appRegistry;
_localFQDN = localFQDN;
- _maxNoOfChannels = ApplicationRegistry.getInstance().getConfiguration().getMaxChannelCount();
+ _maxNoOfChannels = appRegistry.getConfiguration().getMaxChannelCount();
+ _authManager = authManager;
}
private static Map<String, Object> createConnectionProperties(final BrokerConfig brokerConfig)
@@ -110,13 +114,13 @@ public class ServerConnectionDelegate extends ServerDelegate
protected SaslServer createSaslServer(String mechanism) throws SaslException
{
- return _appRegistry.getAuthenticationManager().createSaslServer(mechanism, _localFQDN);
+ return _authManager.createSaslServer(mechanism, _localFQDN);
}
protected void secure(final SaslServer ss, final Connection conn, final byte[] response)
{
- final AuthenticationResult authResult = _appRegistry.getAuthenticationManager().authenticate(ss, response);
+ final AuthenticationResult authResult = _authManager.authenticate(ss, response);
final ServerConnection sconn = (ServerConnection) conn;
diff --git a/qpid/java/broker/src/test/java/org/apache/qpid/server/transport/ServerConnectionMBeanTest.java b/qpid/java/broker/src/test/java/org/apache/qpid/server/transport/ServerConnectionMBeanTest.java
index dcb3692cf5..b0b81355ac 100644
--- a/qpid/java/broker/src/test/java/org/apache/qpid/server/transport/ServerConnectionMBeanTest.java
+++ b/qpid/java/broker/src/test/java/org/apache/qpid/server/transport/ServerConnectionMBeanTest.java
@@ -32,6 +32,7 @@ import org.apache.qpid.transport.Session;
import javax.management.JMException;
import javax.management.openmbean.CompositeData;
import javax.management.openmbean.TabularData;
+import java.net.InetSocketAddress;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
@@ -80,7 +81,7 @@ public class ServerConnectionMBeanTest extends InternalBrokerBaseCase
"authid", "remoteProcessName", new Integer(1967), new Integer(1970), vhost.getConfigStore(), Boolean.FALSE);
_serverConnection.setConnectionConfig(config);
_serverConnection.setVirtualHost(vhost);
- _serverConnection.setConnectionDelegate(new ServerConnectionDelegate(getRegistry(), ""));
+ _serverConnection.setConnectionDelegate(new ServerConnectionDelegate(getRegistry(), "", getRegistry().getAuthenticationManager(new InetSocketAddress(5672))));
_serverSession = new ServerSessionMock(_serverConnection, 1);
_mbean = (ServerConnectionMBean) _serverConnection.getManagedObject();
}