You are viewing a plain text version of this content. The canonical link for it is here.
Posted to slide-user@jakarta.apache.org by Jean-Damien Bouvier <Je...@hardis.fr> on 2007/01/18 15:30:48 UTC
add user with Struts
Hi !
I wish to create a new user trough a sample Form with Struts. I've got a
text field for the new user name and then I call the Slide API.
Here is my code AddUserAction :
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws Exception
{
String username = ((demo.AddUserForm)form).getUsername();
// prepare the namespace access token (assuming you want the
default namespace)
String namespace = Domain.getDefaultNamespace();
SlideToken st = WebdavUtils.getSlideToken(request);
if(!"".equals(username)) {
NamespaceAccessToken nat = Domain.accessNamespace(new
SecurityToken(this), namespace);
// prepare the structure helper
Structure structureHelper = nat.getStructureHelper();
try {
try {
// start namespace tansaction
nat.begin();
// retrieve the node to be linked
SubjectNode user = new SubjectNode(
USERS_REPOSITORY + username);
structureHelper.create(st, user,
USERS_REPOSITORY + username);
// commit the transaction
nat.commit();
} catch (AccessDeniedException ex) {
ex.printStackTrace();
throw ex;
} catch (ObjectAlreadyExistsException ex) {
ex.printStackTrace();
throw ex;
} catch (Exception ex) {
ex.printStackTrace();
throw ex;
}
// ... SUCCESS ...
} catch (Exception ex) {
try {
nat.rollback();
} catch (SystemException sysex) { // catch
silently }
}
}
}
return mapping.findForward(FORWARD_addUser);
}
But the security check fails (I've added some logs in LTISecurityImpl that
inherits from ACLSecurityImpl) :
Check credentials on /users by /users/root for action /actions/bind
Check credentials on /users by /users/root for action /actions/write (-->
this is to store the parent object)
Check credentials on /users/johnny by /users/root for action
/actions/write
org.apache.slide.security.AccessDeniedException: Access denied on
/users/johnny by user /users/root for action /actions/write
at org.apache.slide.security.SecurityImpl.checkCredentials(
SecurityImpl.java:427)
at fr.lti.magic.LTISecurityImpl.checkCredentials(
LTISecurityImpl.java:21)
at org.apache.slide.structure.StructureImpl.store(
StructureImpl.java:488)
at org.apache.slide.structure.StructureImpl.store(
StructureImpl.java:458)
at org.apache.slide.structure.StructureImpl.create(
StructureImpl.java:380)
at demo.AddUserAction.createUser(AddUserAction.java:80)
>From what I understand, the parent object is first stored (here /users) to
reflect the new added child and then the child is stored. But to store the
child (here /users/jonnhy), Slide first checks if root has write access on
/users/johnny ! There is obviously something wrong, but I don't get it.
Thanks for your help !
Jean-Damien Bouvier