You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-dev@portals.apache.org by jf...@apache.org on 2004/07/29 05:45:35 UTC
cvs commit: jakarta-jetspeed/src/java/org/apache/jetspeed/services/security SecurityCacheImpl.java
jford 2004/07/28 20:45:35
Modified: src/java/org/apache/jetspeed/services/security
SecurityCacheImpl.java
Log:
Added messaging support
Revision Changes Path
1.12 +183 -4 jakarta-jetspeed/src/java/org/apache/jetspeed/services/security/SecurityCacheImpl.java
Index: SecurityCacheImpl.java
===================================================================
RCS file: /home/cvs/jakarta-jetspeed/src/java/org/apache/jetspeed/services/security/SecurityCacheImpl.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- SecurityCacheImpl.java 25 Jun 2004 15:50:24 -0000 1.11
+++ SecurityCacheImpl.java 29 Jul 2004 03:45:35 -0000 1.12
@@ -21,6 +21,10 @@
import java.util.Iterator;
import java.util.Map;
+import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.MessageListener;
+import javax.jms.ObjectMessage;
import javax.servlet.ServletConfig;
import org.apache.jetspeed.om.security.Group;
@@ -28,8 +32,10 @@
import org.apache.jetspeed.om.security.Permission;
import org.apache.jetspeed.om.security.Role;
import org.apache.jetspeed.services.JetspeedSecurity;
+import org.apache.jetspeed.services.Messenger;
import org.apache.jetspeed.services.logging.JetspeedLogFactoryService;
import org.apache.jetspeed.services.logging.JetspeedLogger;
+import org.apache.jetspeed.services.messaging.MessagingService;
import org.apache.turbine.services.InitializationException;
import org.apache.turbine.services.TurbineBaseService;
import org.apache.turbine.services.TurbineServices;
@@ -44,7 +50,7 @@
public class SecurityCacheImpl extends TurbineBaseService
- implements SecurityCacheService
+ implements SecurityCacheService, MessageListener
{
/**
* Static initialization of the logger for this class
@@ -53,6 +59,7 @@
protected Map acls = new HashMap();
protected Map perms = new HashMap();
+ private boolean enableMessaging = false;
/*
* Utility method for accessing the service
@@ -118,7 +125,14 @@
if (!perms.containsKey(role.getName()))
{
perms.put(role.getName(), new HashMap());
- }
+ }
+
+ //is there a need to send this message?
+ if(enableMessaging)
+ {
+ Message message = createMessage(null, role.getName());
+ Messenger.sendMessage(message, MessagingService.SECURITY_CACHE_UPDATE_SUBJECT);
+ }
}
public void addRole(String username, Role role)
@@ -131,7 +145,13 @@
if (!perms.containsKey(role.getName()))
{
perms.put(role.getName(), new HashMap());
- }
+ }
+
+ if(enableMessaging)
+ {
+ Message message = createMessage(username, null);
+ Messenger.sendMessage(message, MessagingService.SECURITY_CACHE_UPDATE_SUBJECT);
+ }
}
public void addRole(String username, Role role, Group group)
@@ -145,6 +165,12 @@
{
perms.put(role.getName(), new HashMap());
}
+
+ if(enableMessaging)
+ {
+ Message message = createMessage(username, null);
+ Messenger.sendMessage(message, MessagingService.SECURITY_CACHE_UPDATE_SUBJECT);
+ }
}
public boolean hasRole(String username, String roleName)
@@ -180,6 +206,12 @@
{
acl.removeRole(roleName, groupName);
}
+
+ if(enableMessaging)
+ {
+ Message message = createMessage(username, null);
+ Messenger.sendMessage(message, MessagingService.SECURITY_CACHE_UPDATE_SUBJECT);
+ }
}
public CachedAcl getAcl(String username)
@@ -215,6 +247,12 @@
{
map.put(permission.getName(), permission);
}
+
+ if(enableMessaging)
+ {
+ Message message = createMessage(null, roleName);
+ Messenger.sendMessage(message, MessagingService.SECURITY_CACHE_UPDATE_SUBJECT);
+ }
}
public boolean hasPermission(String roleName, String permissionName)
@@ -234,6 +272,12 @@
{
map.remove(permissionName);
}
+
+ if(enableMessaging)
+ {
+ Message message = createMessage(null, roleName);
+ Messenger.sendMessage(message, MessagingService.SECURITY_CACHE_UPDATE_SUBJECT);
+ }
}
public Iterator getPermissions(String roleName)
@@ -259,16 +303,38 @@
acl.removeRole(rolename);
}
perms.remove(rolename);
+
+ if(enableMessaging)
+ {
+ Message message = createMessage(null, rolename);
+ Messenger.sendMessage(message, MessagingService.SECURITY_CACHE_UPDATE_SUBJECT);
+ }
}
public void removeAllPermissions(String permissionName)
{
+ /*
Iterator iterator = perms.values().iterator();
while (iterator.hasNext())
{
Map map = (Map)iterator.next();
map.remove(permissionName);
}
+ */
+
+ Iterator keyIter = perms.keySet().iterator();
+ while (keyIter.hasNext())
+ {
+ String rolename = (String) keyIter.next();
+ Map permissions = (Map)perms.get(rolename);
+ permissions.remove(permissionName);
+
+ if(enableMessaging)
+ {
+ Message message = createMessage(null, rolename);
+ Messenger.sendMessage(message, MessagingService.SECURITY_CACHE_UPDATE_SUBJECT);
+ }
+ }
}
public void loadRolePermissions()
@@ -312,6 +378,22 @@
if (getInit()) return;
super.init(conf);
+
+ this.enableMessaging = getConfiguration().getBoolean("enable_messaging", false);
+ if(enableMessaging)
+ {
+ try
+ {
+ TurbineServices.getInstance().initService(MessagingService.SERVICE_NAME, conf);
+
+ Messenger.addMessageListener(this, SecurityCacheImpl.class.getName(), MessagingService.SECURITY_CACHE_UPDATE_SUBJECT);
+ }
+ catch(Exception e)
+ {
+ enableMessaging = false;
+ logger.warn("Messaging support has been disabled due to a failure to initialize the service or add a listener.");
+ }
+ }
setInit(true);
}
@@ -337,6 +419,103 @@
}
}
+ /**
+ * @see javax.jms.MessageListener#onMessage(javax.jms.Message)
+ */
+ public void onMessage(Message message)
+ {
+ if(message instanceof ObjectMessage)
+ {
+ ObjectMessage objMsg = (ObjectMessage)message;
+ Object obj = null;
+ try
+ {
+ obj = objMsg.getObject();
+ }
+ catch (JMSException e)
+ {
+ logger.error("Failed to retrieve object from message.");
+ return;
+ }
+
+ if((obj != null) && (obj instanceof SecurityMessage))
+ {
+ SecurityMessage sm = (SecurityMessage)obj;
+ String user = sm.getUser();
+ if(user != null)
+ {
+ try
+ {
+ this.load(user);
+ }
+ catch (JetspeedSecurityException e)
+ {
+ logger.error("Failed to update user.", e);
+ }
+ }
+
+ String role = sm.getRole();
+ if(role != null)
+ {
+ perms.remove(role);
+ loadRolePermissions(role);
+ }
+ }
+ }
+ }
+
+ private Message createMessage(String userName, String roleName)
+ {
+ ObjectMessage objMsg = null;
+
+ try
+ {
+ objMsg = (ObjectMessage) Messenger.createMessage(MessagingService.OBJECT_MESSAGE);
+
+ SecurityMessage message = new SecurityMessage();
+ message.setUser(userName);
+ message.setRole(roleName);
+ objMsg.setObject(message);
+ }
+ catch (JMSException e)
+ {
+ logger.error("Failed to create message.", e);
+ }
+
+ return objMsg;
+ }
+
+ public void loadRolePermissions(String roleName)
+ {
+ try
+ {
+ Role role = null;
+ try
+ {
+ JetspeedSecurity.getRole(roleName);
+ }
+ catch(RoleException e)
+ {
+ //no role found, nothing to do
+ }
+
+ if(role != null)
+ {
+ Map map = new HashMap();
+ Iterator prms = JetspeedSecurity.getPermissions(role.getName());
+ while (prms.hasNext())
+ {
+ Permission perm = (Permission)prms.next();
+ map.put(perm.getName(), perm);
+ }
+ perms.put(role.getName(), map);
+ }
+ }
+ catch (JetspeedSecurityException e)
+ {
+ logger.error("Exception", e);
+ }
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jetspeed-dev-help@jakarta.apache.org