Fix Remote RCP not working
authorMathieu Baudier <mbaudier@argeo.org>
Tue, 19 Mar 2013 18:53:08 +0000 (18:53 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Tue, 19 Mar 2013 18:53:08 +0000 (18:53 +0000)
https://www.argeo.org/bugzilla/show_bug.cgi?id=148

git-svn-id: https://svn.argeo.org/commons/trunk@6176 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

security/modules/org.argeo.security.dao.jackrabbit/META-INF/spring/security-jcr-osgi.xml
security/modules/org.argeo.security.dao.jackrabbit/META-INF/spring/security-jcr-services.xml
security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/jcr/OsJcrUserAdminService.java

index 7ce6f05521affc44f6d549c5da774bfece8b3ff7..9f6d4325691bd6916ca6400d5afe837068508c63 100644 (file)
 \r
        <service ref="repositoryFactory" interface="javax.jcr.RepositoryFactory" />\r
 \r
+       <!-- User management -->\r
+       <service ref="userDetailsManager"\r
+               interface="org.springframework.security.userdetails.UserDetailsService"\r
+               context-class-loader="service-provider" />\r
+       <service ref="userDetailsManager"\r
+               interface="org.springframework.security.userdetails.UserDetailsManager"\r
+               context-class-loader="service-provider" />\r
+       <service ref="userDetailsManager" interface="org.argeo.security.UserAdminService"\r
+               context-class-loader="service-provider" />\r
+\r
 </beans:beans>
\ No newline at end of file
index ce2361ef4dc20ff8614395e28eb6bff63fe07cbf..1300a05506f8cc57c0f428994bd31714e8907a27 100644 (file)
@@ -32,4 +32,9 @@
                <property name="key" value="${argeo.security.systemKey}" />
        </bean>
 
+       <!-- Dummy user manager -->
+       <bean id="userDetailsManager" class="org.argeo.security.jcr.OsJcrUserAdminService"
+               init-method="init" destroy-method="destroy">
+       </bean>
+
 </beans>
\ No newline at end of file
index 8dec3b4eb33c926f6c81e86dba4759765a912a99..c25bdb86577f70213aa6e9e95528bbc4ac15b27a 100644 (file)
@@ -15,7 +15,9 @@
  */
 package org.argeo.security.jcr;
 
+import java.util.ArrayList;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Set;
 
 import javax.jcr.Node;
@@ -28,6 +30,7 @@ import org.argeo.jcr.JcrUtils;
 import org.argeo.jcr.UserJcrUtils;
 import org.argeo.security.UserAdminService;
 import org.springframework.dao.DataAccessException;
+import org.springframework.security.userdetails.User;
 import org.springframework.security.userdetails.UserDetails;
 import org.springframework.security.userdetails.UsernameNotFoundException;
 
@@ -38,6 +41,9 @@ import org.springframework.security.userdetails.UsernameNotFoundException;
 public class OsJcrUserAdminService implements UserAdminService {
        private Repository repository;
 
+       /** In memory roles provided by applications. */
+       private List<String> roles = new ArrayList<String>();
+
        // private Session adminSession;
 
        public void init() {
@@ -82,19 +88,24 @@ public class OsJcrUserAdminService implements UserAdminService {
        public UserDetails loadUserByUsername(String username)
                        throws UsernameNotFoundException, DataAccessException {
                if (getSPropertyUsername().equals(username)) {
-                       JcrUserDetails userDetails;
-                       Session adminSession = null;
-                       try {
-                               adminSession = repository.login();
-                               Node userProfile = UserJcrUtils.getUserProfile(adminSession,
-                                               username);
-                               userDetails = new JcrUserDetails(userProfile, "",
+                       UserDetails userDetails;
+                       if (repository != null) {
+                               Session adminSession = null;
+                               try {
+                                       adminSession = repository.login();
+                                       Node userProfile = UserJcrUtils.getUserProfile(
+                                                       adminSession, username);
+                                       userDetails = new JcrUserDetails(userProfile, "",
+                                                       OsJcrAuthenticationProvider.getBaseAuthorities());
+                               } catch (RepositoryException e) {
+                                       throw new ArgeoException(
+                                                       "Cannot retrieve user profile for " + username, e);
+                               } finally {
+                                       JcrUtils.logoutQuietly(adminSession);
+                               }
+                       } else {
+                               userDetails = new User(username, "", true, true, true, true,
                                                OsJcrAuthenticationProvider.getBaseAuthorities());
-                       } catch (RepositoryException e) {
-                               throw new ArgeoException("Cannot retrieve user profile for "
-                                               + username, e);
-                       } finally {
-                               JcrUtils.logoutQuietly(adminSession);
                        }
                        return userDetails;
                } else {
@@ -124,17 +135,16 @@ public class OsJcrUserAdminService implements UserAdminService {
 
        /** <b>Unsupported</b> */
        public void newRole(String role) {
-               throw new UnsupportedOperationException();
+               roles.add(role);
        }
 
        public Set<String> listEditableRoles() {
-               Set<String> set = new HashSet<String>();
-               return set;
+               return new HashSet<String>(roles);
        }
 
        /** <b>Unsupported</b> */
        public void deleteRole(String role) {
-               throw new UnsupportedOperationException();
+               roles.remove(role);
        }
 
        public void setRepository(Repository repository) {