summaryrefslogtreecommitdiff
path: root/java/broker
diff options
context:
space:
mode:
authorAlex Rudyy <orudyy@apache.org>2013-03-22 10:15:35 +0000
committerAlex Rudyy <orudyy@apache.org>2013-03-22 10:15:35 +0000
commitb4ddcca5c43e19546e095b6fad766ddc96bb05ea (patch)
tree3356a753950404f1a0bed045dda9c15f07e5006c /java/broker
parentc94d878a1e8d0c030eedfdc76b332237cba71e88 (diff)
downloadqpid-python-b4ddcca5c43e19546e095b6fad766ddc96bb05ea.tar.gz
QPID-4661: Improve broker attribute editing UI to avoid sending of unmodified attributes, improve UI look-&-feel, improve broker attribute changing functionality to avoid unnecessary modifications
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1459695 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java/broker')
-rw-r--r--java/broker/src/main/java/org/apache/qpid/server/configuration/startup/AuthenticationProviderRecoverer.java2
-rw-r--r--java/broker/src/main/java/org/apache/qpid/server/configuration/startup/BrokerRecoverer.java7
-rw-r--r--java/broker/src/main/java/org/apache/qpid/server/model/AuthenticationProvider.java2
-rw-r--r--java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderAdapter.java15
-rw-r--r--java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactory.java5
-rw-r--r--java/broker/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java87
-rw-r--r--java/broker/src/main/java/org/apache/qpid/server/security/group/GroupPrincipalAccessor.java2
-rw-r--r--java/broker/src/test/java/org/apache/qpid/server/configuration/startup/BrokerRecovererTest.java4
-rw-r--r--java/broker/src/test/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactoryTest.java2
9 files changed, 81 insertions, 45 deletions
diff --git a/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/AuthenticationProviderRecoverer.java b/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/AuthenticationProviderRecoverer.java
index 9b06a2b499..3290c827c9 100644
--- a/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/AuthenticationProviderRecoverer.java
+++ b/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/AuthenticationProviderRecoverer.java
@@ -47,7 +47,7 @@ public class AuthenticationProviderRecoverer implements ConfiguredObjectRecovere
AuthenticationProvider authenticationProvider = _authenticationProviderFactory.create(
configurationEntry.getId(),
broker,
- attributes, null);
+ attributes);
return authenticationProvider;
}
diff --git a/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/BrokerRecoverer.java b/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/BrokerRecoverer.java
index b76717802c..0d7be75a0b 100644
--- a/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/BrokerRecoverer.java
+++ b/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/BrokerRecoverer.java
@@ -18,7 +18,6 @@ import org.apache.qpid.server.model.adapter.BrokerAdapter;
import org.apache.qpid.server.model.adapter.PortFactory;
import org.apache.qpid.server.configuration.store.StoreConfigurationChangeListener;
import org.apache.qpid.server.configuration.updater.TaskExecutor;
-import org.apache.qpid.server.security.group.GroupPrincipalAccessor;
import org.apache.qpid.server.stats.StatisticsGatherer;
import org.apache.qpid.server.virtualhost.VirtualHostRegistry;
@@ -103,12 +102,6 @@ public class BrokerRecoverer implements ConfiguredObjectRecoverer<Broker>
}
broker.setDefaultAuthenticationProvider(defaultAuthenticationProvider);
- GroupPrincipalAccessor groupPrincipalAccessor = new GroupPrincipalAccessor(broker.getGroupProviders());
- for (AuthenticationProvider authenticationProvider : authenticationProviders)
- {
- authenticationProvider.setGroupAccessor(groupPrincipalAccessor);
- }
-
Collection<Port> ports = broker.getPorts();
for (Port port : ports)
{
diff --git a/java/broker/src/main/java/org/apache/qpid/server/model/AuthenticationProvider.java b/java/broker/src/main/java/org/apache/qpid/server/model/AuthenticationProvider.java
index 2e5c3a0cc7..61ceae9cf0 100644
--- a/java/broker/src/main/java/org/apache/qpid/server/model/AuthenticationProvider.java
+++ b/java/broker/src/main/java/org/apache/qpid/server/model/AuthenticationProvider.java
@@ -25,7 +25,6 @@ import java.util.Collection;
import java.util.Collections;
import org.apache.qpid.server.security.SubjectCreator;
-import org.apache.qpid.server.security.group.GroupPrincipalAccessor;
public interface AuthenticationProvider extends ConfiguredObject
{
@@ -67,5 +66,4 @@ public interface AuthenticationProvider extends ConfiguredObject
*/
SubjectCreator getSubjectCreator();
- void setGroupAccessor(GroupPrincipalAccessor groupPrincipalAccessor);
}
diff --git a/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderAdapter.java b/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderAdapter.java
index a6c5a74765..a7204d991c 100644
--- a/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderAdapter.java
+++ b/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderAdapter.java
@@ -36,6 +36,7 @@ import javax.security.auth.login.AccountNotFoundException;
import org.apache.log4j.Logger;
import org.apache.qpid.server.model.AuthenticationProvider;
import org.apache.qpid.server.model.Broker;
+import org.apache.qpid.server.model.ConfigurationChangeListener;
import org.apache.qpid.server.model.ConfiguredObject;
import org.apache.qpid.server.model.IllegalStateTransitionException;
import org.apache.qpid.server.model.IntegrityViolationException;
@@ -67,8 +68,6 @@ public abstract class AuthenticationProviderAdapter<T extends AuthenticationMana
protected T _authManager;
protected final Broker _broker;
- private GroupPrincipalAccessor _groupAccessor;
-
protected Collection<String> _supportedAttributes;
Map<String, AuthenticationManagerFactory> _factories;
@@ -238,10 +237,6 @@ public abstract class AuthenticationProviderAdapter<T extends AuthenticationMana
}
else if(desiredState == State.ACTIVE)
{
- if (_groupAccessor == null)
- {
- throw new IllegalStateTransitionException("Cannot transit into ACTIVE state with null group accessor!");
- }
_authManager.initialise();
return true;
}
@@ -256,12 +251,7 @@ public abstract class AuthenticationProviderAdapter<T extends AuthenticationMana
@Override
public SubjectCreator getSubjectCreator()
{
- return new SubjectCreator(_authManager, _groupAccessor);
- }
-
- public void setGroupAccessor(GroupPrincipalAccessor groupAccessor)
- {
- _groupAccessor = groupAccessor;
+ return new SubjectCreator(_authManager, new GroupPrincipalAccessor(_broker.getGroupProviders()));
}
@Override
@@ -343,7 +333,6 @@ public abstract class AuthenticationProviderAdapter<T extends AuthenticationMana
}
-
}
public static class PrincipalDatabaseAuthenticationManagerAdapter
diff --git a/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactory.java b/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactory.java
index 721282fb9c..fbdc2e42b5 100644
--- a/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactory.java
+++ b/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactory.java
@@ -33,7 +33,6 @@ import org.apache.qpid.server.plugin.AuthenticationManagerFactory;
import org.apache.qpid.server.plugin.QpidServiceLoader;
import org.apache.qpid.server.security.auth.manager.AuthenticationManager;
import org.apache.qpid.server.security.auth.manager.PrincipalDatabaseAuthenticationManager;
-import org.apache.qpid.server.security.group.GroupPrincipalAccessor;
import org.apache.qpid.server.model.adapter.AuthenticationProviderAdapter.PrincipalDatabaseAuthenticationManagerAdapter;
import org.apache.qpid.server.model.adapter.AuthenticationProviderAdapter.SimpleAuthenticationProviderAdapter;
@@ -58,9 +57,8 @@ public class AuthenticationProviderFactory
* <p>
* The configured {@link AuthenticationManagerFactory}'s are used to try to create the {@link AuthenticationProvider}.
* The first non-null instance is returned. The factories are used in non-deterministic order.
- * @param groupPrincipalAccessor TODO
*/
- public AuthenticationProvider create(UUID id, Broker broker, Map<String, Object> attributes, GroupPrincipalAccessor groupPrincipalAccessor)
+ public AuthenticationProvider create(UUID id, Broker broker, Map<String, Object> attributes)
{
for (AuthenticationManagerFactory factory : _factories)
{
@@ -77,7 +75,6 @@ public class AuthenticationProviderFactory
{
authenticationProvider = new SimpleAuthenticationProviderAdapter(id, broker, manager, attributes, factory.getAttributeNames());
}
- authenticationProvider.setGroupAccessor(groupPrincipalAccessor);
return authenticationProvider;
}
}
diff --git a/java/broker/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java b/java/broker/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
index fd275b23bd..7e4282f4ee 100644
--- a/java/broker/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
+++ b/java/broker/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
@@ -63,7 +63,6 @@ import org.apache.qpid.server.security.auth.manager.Base64MD5PasswordFileAuthent
import org.apache.qpid.server.security.auth.manager.PlainPasswordFileAuthenticationManagerFactory;
import org.apache.qpid.server.security.group.FileGroupManager;
import org.apache.qpid.server.security.group.GroupManager;
-import org.apache.qpid.server.security.group.GroupPrincipalAccessor;
import org.apache.qpid.server.security.SecurityManager;
import org.apache.qpid.server.security.SubjectCreator;
import org.apache.qpid.server.stats.StatisticsGatherer;
@@ -209,6 +208,14 @@ public class BrokerAdapter extends AbstractAdapter implements Broker, Configurat
*/
private void createBrokerChildrenFromAttributes()
{
+ createGroupProvider();
+ createKeyStore();
+ createTrustStore();
+ createPeerStore();
+ }
+
+ private void createGroupProvider()
+ {
String groupFile = (String) getAttribute(GROUP_FILE);
if (groupFile != null)
{
@@ -222,6 +229,10 @@ public class BrokerAdapter extends AbstractAdapter implements Broker, Configurat
{
_groupProviders.remove(DEFAULT_GROUP_PROFIDER_NAME);
}
+ }
+
+ private void createKeyStore()
+ {
Map<String, Object> actualAttributes = getActualAttributes();
String keyStorePath = (String) getAttribute(KEY_STORE_PATH);
if (keyStorePath != null)
@@ -240,6 +251,11 @@ public class BrokerAdapter extends AbstractAdapter implements Broker, Configurat
{
_keyStores.remove(_defaultKeyStoreId);
}
+ }
+
+ private void createTrustStore()
+ {
+ Map<String, Object> actualAttributes = getActualAttributes();
String trustStorePath = (String) getAttribute(TRUST_STORE_PATH);
if (trustStorePath != null)
{
@@ -257,6 +273,11 @@ public class BrokerAdapter extends AbstractAdapter implements Broker, Configurat
{
_trustStores.remove(_defaultTrustStoreId);
}
+ }
+
+ private void createPeerStore()
+ {
+ Map<String, Object> actualAttributes = getActualAttributes();
String peerStorePath = (String) getAttribute(PEER_STORE_PATH);
UUID peerStoreId = UUIDGenerator.generateBrokerChildUUID(TrustStore.class.getSimpleName(), DEFAULT_PEER_STORE_NAME);
if (peerStorePath != null)
@@ -539,11 +560,7 @@ public class BrokerAdapter extends AbstractAdapter implements Broker, Configurat
}
- // it's cheap to create the groupPrincipalAccessor on the fly
- GroupPrincipalAccessor groupPrincipalAccessor = new GroupPrincipalAccessor(_groupProviders.values());
-
- authenticationProvider = _authenticationProviderFactory.create(UUID.randomUUID(), this, attributes,
- groupPrincipalAccessor);
+ authenticationProvider = _authenticationProviderFactory.create(UUID.randomUUID(), this, attributes);
addAuthenticationProvider(authenticationProvider);
}
authenticationProvider.setDesiredState(State.INITIALISING, State.ACTIVE);
@@ -1033,15 +1050,63 @@ public class BrokerAdapter extends AbstractAdapter implements Broker, Configurat
//TODO: Add management mode check
Map<String, Object> convertedAttributes = MapValueConverter.convert(attributes, ATTRIBUTE_TYPES);
validateAttributes(convertedAttributes);
- super.changeAttributes(convertedAttributes);
+
+ boolean keyStoreChanged = false;
+ boolean trustStoreChanged = false;
+ boolean peerStoreChanged = false;
+ Collection<String> names = AVAILABLE_ATTRIBUTES;
+ for (String name : names)
+ {
+ if (attributes.containsKey(name))
+ {
+ Object desired = attributes.get(name);
+ Object expected = getAttribute(name);
+ if (changeAttribute(name, expected, desired))
+ {
+ if (GROUP_FILE.equals(name))
+ {
+ createGroupProvider();
+ }
+ else if (DEFAULT_AUTHENTICATION_PROVIDER.equals(name))
+ {
+ if (!_defaultAuthenticationProvider.getName().equals(desired))
+ {
+ _defaultAuthenticationProvider = findAuthenticationProviderByName((String)desired);
+ }
+ }
+ else if (KEY_STORE_PATH.equals(name) || KEY_STORE_PASSWORD.equals(name) || KEY_STORE_CERT_ALIAS.equals(name))
+ {
+ keyStoreChanged = true;
+ }
+ else if (TRUST_STORE_PATH.equals(name) || TRUST_STORE_PASSWORD.equals(name))
+ {
+ trustStoreChanged = true;
+ }
+ else if (PEER_STORE_PATH.equals(name) || PEER_STORE_PASSWORD.equals(name))
+ {
+ peerStoreChanged = true;
+ }
+ attributeSet(name, expected, desired);
+ }
+ }
+ }
// the calls below are not thread safe but they should be fine in a management mode
// as there will be no user connected
- createBrokerChildrenFromAttributes();
- String defaultProviderName = (String)getAttribute(DEFAULT_AUTHENTICATION_PROVIDER);
- if (!_defaultAuthenticationProvider.getName().equals(defaultProviderName))
+ // The new keystore/trustore/peerstore will be only used with new ports
+ // At the moment we cannot restart ports with new keystore/trustore/peerstore
+
+ if (keyStoreChanged)
+ {
+ createKeyStore();
+ }
+ if (trustStoreChanged)
+ {
+ createTrustStore();
+ }
+ if (peerStoreChanged)
{
- _defaultAuthenticationProvider = findAuthenticationProviderByName(defaultProviderName);
+ createPeerStore();
}
}
diff --git a/java/broker/src/main/java/org/apache/qpid/server/security/group/GroupPrincipalAccessor.java b/java/broker/src/main/java/org/apache/qpid/server/security/group/GroupPrincipalAccessor.java
index d549b76aab..1b8cdc91bc 100644
--- a/java/broker/src/main/java/org/apache/qpid/server/security/group/GroupPrincipalAccessor.java
+++ b/java/broker/src/main/java/org/apache/qpid/server/security/group/GroupPrincipalAccessor.java
@@ -25,8 +25,6 @@ import java.util.HashSet;
import java.util.Set;
import org.apache.qpid.server.model.GroupProvider;
-import org.apache.qpid.server.model.adapter.GroupProviderAdapter;
-
public class GroupPrincipalAccessor
{
diff --git a/java/broker/src/test/java/org/apache/qpid/server/configuration/startup/BrokerRecovererTest.java b/java/broker/src/test/java/org/apache/qpid/server/configuration/startup/BrokerRecovererTest.java
index 8e0bfdaeb7..79dcf0cac4 100644
--- a/java/broker/src/test/java/org/apache/qpid/server/configuration/startup/BrokerRecovererTest.java
+++ b/java/broker/src/test/java/org/apache/qpid/server/configuration/startup/BrokerRecovererTest.java
@@ -53,7 +53,6 @@ import org.apache.qpid.server.model.VirtualHost;
import org.apache.qpid.server.model.adapter.AuthenticationProviderFactory;
import org.apache.qpid.server.model.adapter.PortFactory;
import org.apache.qpid.server.configuration.updater.TaskExecutor;
-import org.apache.qpid.server.security.group.GroupPrincipalAccessor;
import org.apache.qpid.server.stats.StatisticsGatherer;
import org.apache.qpid.server.virtualhost.VirtualHostRegistry;
@@ -300,9 +299,6 @@ public class BrokerRecovererTest extends TestCase
assertNotNull(broker);
assertEquals("Unexpected number of authentication providers", 2, broker.getAuthenticationProviders().size());
- //verify that a GroupAcessor was added to the AuthenticationProviders
- verify(_authenticationProvider1).setGroupAccessor(any(GroupPrincipalAccessor.class));
- verify(authenticationProvider2).setGroupAccessor(any(GroupPrincipalAccessor.class));
}
public void testCreateBrokerWithGroupProvider()
diff --git a/java/broker/src/test/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactoryTest.java b/java/broker/src/test/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactoryTest.java
index 585fecae83..9bf80bb87e 100644
--- a/java/broker/src/test/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactoryTest.java
+++ b/java/broker/src/test/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactoryTest.java
@@ -74,7 +74,7 @@ public class AuthenticationProviderFactoryTest extends TestCase
when(authenticationManagerFactory.createInstance(attributes)).thenReturn(authenticationManager);
AuthenticationProviderFactory providerFactory = new AuthenticationProviderFactory(authManagerFactoryServiceLoader);
- AuthenticationProvider provider = providerFactory.create(id, broker, attributes, null);
+ AuthenticationProvider provider = providerFactory.create(id, broker, attributes);
assertNotNull("Provider is not created", provider);
assertEquals("Unexpected ID", id, provider.getId());