]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - security/runtime/org.argeo.security.jackrabbit/src/main/java/org/argeo/security/jackrabbit/ArgeoSecurityManager.java
Improve system execution
[lgpl/argeo-commons.git] / security / runtime / org.argeo.security.jackrabbit / src / main / java / org / argeo / security / jackrabbit / ArgeoSecurityManager.java
index c6a0fc7169a310658a98749f0c58af8b2a806679..3e9f015bb879258fe1c6fd3e94a71ca603e9c34d 100644 (file)
@@ -26,6 +26,7 @@ import org.apache.jackrabbit.api.security.user.Group;
 import org.apache.jackrabbit.api.security.user.User;
 import org.apache.jackrabbit.api.security.user.UserManager;
 import org.apache.jackrabbit.core.DefaultSecurityManager;
+import org.apache.jackrabbit.core.security.AnonymousPrincipal;
 import org.apache.jackrabbit.core.security.SecurityConstants;
 import org.apache.jackrabbit.core.security.authorization.WorkspaceAccessManager;
 import org.argeo.ArgeoException;
@@ -47,8 +48,12 @@ public class ArgeoSecurityManager extends DefaultSecurityManager {
                        throws RepositoryException {
                long begin = System.currentTimeMillis();
 
-               log.debug(subject);
-               // skip Jackrabbit system user
+               if (log.isTraceEnabled())
+                       log.trace(subject);
+               // skip anonymous user (no rights)
+               if (!subject.getPrincipals(AnonymousPrincipal.class).isEmpty())
+                       return super.getUserID(subject, workspaceName);
+               // skip Jackrabbit system user (all rights)
                if (!subject.getPrincipals(ArgeoSystemPrincipal.class).isEmpty())
                        return super.getUserID(subject, workspaceName);
 
@@ -68,6 +73,8 @@ public class ArgeoSecurityManager extends DefaultSecurityManager {
                if (user == null) {
                        user = systemUm.createUser(userId, authen.getCredentials()
                                        .toString(), authen, null);
+                       JcrUtils.createUserHomeIfNeeded(getSystemSession(), userId);
+                       getSystemSession().save();
                        setSecurityHomeAuthorizations(user);
                        log.info(userId + " added as " + user);
                }
@@ -92,15 +99,15 @@ public class ArgeoSecurityManager extends DefaultSecurityManager {
                                group.removeMember(user);
                }
 
-               if (log.isDebugEnabled())
-                       log.debug("Spring and Jackrabbit Security synchronized for user "
+               if (log.isTraceEnabled())
+                       log.trace("Spring and Jackrabbit Security synchronized for user "
                                        + userId + " in " + (System.currentTimeMillis() - begin)
                                        + " ms");
                return userId;
        }
 
        protected synchronized void setSecurityHomeAuthorizations(User user) {
-               // give read privileges on user home
+               // give read privileges on user security home
                String userId = "<not yet set>";
                try {
                        userId = user.getID();