FELIX-4390 Make sure OsgiLoginModuleProvider instances are updated
when configuration is updated
(Thanks Tobias Bocanegra for providing the patch)
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1558624 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/jaas/src/main/java/org/apache/felix/jaas/internal/ConfigSpiOsgi.java b/jaas/src/main/java/org/apache/felix/jaas/internal/ConfigSpiOsgi.java
index f62b3e8..beebd8a 100644
--- a/jaas/src/main/java/org/apache/felix/jaas/internal/ConfigSpiOsgi.java
+++ b/jaas/src/main/java/org/apache/felix/jaas/internal/ConfigSpiOsgi.java
@@ -375,6 +375,11 @@
@Override
public void modifiedService(ServiceReference reference, Object service)
{
+ LoginModuleFactory lmf = providerMap.get(reference);
+ if (lmf instanceof OsgiLoginModuleProvider) {
+ // refresh to update configs
+ ((OsgiLoginModuleProvider) lmf).configure();
+ }
recreateConfigs();
}
diff --git a/jaas/src/main/java/org/apache/felix/jaas/internal/OsgiLoginModuleProvider.java b/jaas/src/main/java/org/apache/felix/jaas/internal/OsgiLoginModuleProvider.java
index 4e71fa5..a16ed46 100644
--- a/jaas/src/main/java/org/apache/felix/jaas/internal/OsgiLoginModuleProvider.java
+++ b/jaas/src/main/java/org/apache/felix/jaas/internal/OsgiLoginModuleProvider.java
@@ -34,19 +34,23 @@
final class OsgiLoginModuleProvider implements LoginModuleProvider
{
private final LoginModuleFactory delegate;
- private final int ranking;
- private final LoginModuleControlFlag flag;
- private final String realmName;
private final ServiceReference serviceReference;
+ private int ranking;
+ private LoginModuleControlFlag flag;
+ private String realmName;
+
public OsgiLoginModuleProvider(ServiceReference sr, LoginModuleFactory delegate)
{
this.delegate = delegate;
- this.ranking = PropertiesUtil.toInteger(sr.getProperty(Constants.SERVICE_RANKING), 0);
- this.flag = ControlFlag.from(
- (String) sr.getProperty(LoginModuleFactory.JAAS_CONTROL_FLAG)).flag();
- this.realmName = (String) sr.getProperty(LoginModuleFactory.JAAS_REALM_NAME);
this.serviceReference = sr;
+ configure();
+ }
+
+ public void configure() {
+ ranking = PropertiesUtil.toInteger(serviceReference.getProperty(Constants.SERVICE_RANKING), 0);
+ flag = ControlFlag.from((String) serviceReference.getProperty(LoginModuleFactory.JAAS_CONTROL_FLAG)).flag();
+ realmName = (String) serviceReference.getProperty(LoginModuleFactory.JAAS_REALM_NAME);
}
public Map<String, ?> options()