Hi everybody,

We're currently migrating to 4.5 (laugh)...

Our application has its own login mechanism, using a quite standard JEE login 
servlet configured in our web.xml and connected to our corporate LDAP 
infrastruture.

I'm losing my last hair since a couple of hours trying to understand how the 
whole thing is implemented within 4.5. I didn't find any documentation, or 
maybe I failed to understand where I can find it.

With 4.4 we had a custom jaas.config pointing to a custom 
ContainerAuthenticationModule, in which we used to create the Entity and set 
the roles and groups:

[code]  
  @Override
  public void setEntity() {
    EntityImpl entity = new EntityImpl();
    entity.addProperty(Entity.NAME, getRequest().getUserPrincipal().getName());

    this.subject.getPrincipals().add(entity);

    HttpServletRequest request = getRequest();

    Collection<Group> groups = groupManager.getAllGroups();
    for (Group group : groups) {
      if (request.isUserInRole(group.getName())) {
        processGroup(group);
      }
    }
  }

  private void processGroup(Group group) {
    addGroupName(group.getName());
    for (String roleName : group.getRoles()) {
      addRoleName(roleName);
    }
    for (String subGroupName : group.getGroups()) {
      Group subGroup;
      try {
        subGroup = groupManager.getGroup(subGroupName);
        processGroup(subGroup);
      }
      catch (Exception e) {
        throw new IllegalStateException(e);
      }
    }
  }
[/code]


Now with 4.5, the EntityImpl class is marked as deprecated (without any comment 
about what I should do to avoid to use it), so that I can suppose the concept 
behind the whole thing is totally different. But what should I do ?

I've decided to use EntityImpl further on as a first step. To be conform with 
the new API I then use my own ExternalUserManager in order to create my 
ExternalUser:

[code]    
    Map<String, String> properties = new HashMap<String, String>();
    properties.put("name", getRequest().getUserPrincipal().getName());
    properties.put("language", "de"); // TODO
    User user = new MyOwnUserManager().getUser(properties, groupList, roleList);
    this.subject.getPrincipals().add(usr);
[/code]

MyOwnUserManager:

[code] 
  @Override
  public User getUser(Map<String, String> properties, GroupList groupList, 
RoleList roleList)
      throws UnsupportedOperationException {
    return new MyExternalUser(properties, groupList, roleList);
  }
[/code]

As you cann see I fill the properties with the user name and its language. 
Everything fine so far, but now when I try to make it run I get a 
NullPointerException in the class DefaultRepositoryStrategy at the following 
line of code:

return new SimpleCredentials(user.getName(), user.getPassword().toCharArray());

It seems that the user name is known (the one I set before in my 
ContainerAuthenticationModule), but the password is empty. And of course I 
don't know the user's password and am unable to set it !

I think I'm following a totally wrong way and I'm about to find myself a job in 
an other industry (wine, music ?)

Or could maybe somebody help me ? Are there already user experiences with 
ExternalUsers and Magnolia 4.5 ?

Thanks a lot and cheers.

Fabrice

-- 
Context is everything: 
http://forum.magnolia-cms.com/forum/thread.html?threadId=7f03895a-d94f-445a-a734-c0ab920d85d0


----------------------------------------------------------------
For list details, see http://www.magnolia-cms.com/community/mailing-lists.html
Alternatively, use our forums: http://forum.magnolia-cms.com/
To unsubscribe, E-mail to: <user-list-unsubscr...@magnolia-cms.com>
----------------------------------------------------------------

Reply via email to