首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法模拟- Jackrabbit

无法模拟- Jackrabbit
EN

Stack Overflow用户
提问于 2014-09-14 15:12:32
回答 1查看 475关注 0票数 1

我有自定义类型的节点et:document,需要在杰克兔存储库中的一些用户之间共享。

但是,当我试图模拟超级用户并为每个用户分配一个已定义的属性sharedWithMe时,就会得到failed login exception

以应用程序用户身份登录,

代码语言:javascript
复制
SimpleCredentials credentials = new SimpleCredentials(userName, password.toCharArray());
Session session = repository.login(credentials, "default");

正在尝试共享文档(属性已添加到用户节点)

代码语言:javascript
复制
SimpleCredentials credentials = new SimpleCredentials("superuser", "superuser".toCharArray());
Session adminUser = session.impersonate(credentials);
UserManager userManager = ((JackrabbitSession) adminUser).getUserManager();

for(String userID : users) {
    User user = (User) userManager.getAuthorizable(userID);
    Value value = vf.createValue(docPath);
    Value[] sharedDocsPath =  user.getProperty("sharedWithMe");
    int shareDocIndex = 0;
    Value[] revisedSharedDocPath = null;

    if (null != sharedDocsPath && sharedDocsPath.length > 0) {
        revisedSharedDocPath = new Value[sharedDocsPath.length + 1];

        for (Value v : sharedDocsPath) {
            revisedSharedDocPath[shareDocIndex] = v;
            shareDocIndex++;
        }
        revisedSharedDocPath[shareDocIndex] = value;
    } else {
        revisedSharedDocPath = new Value[1];
        revisedSharedDocPath[shareDocIndex] = value;
    }

    user.setProperty("sharedWithMe", revisedSharedDocPath);
}

获取异常:

代码语言:javascript
复制
Caused by: javax.security.auth.login.FailedLoginException: attempt to impersonate denied for superuser
    at org.apache.jackrabbit.core.security.authentication.DefaultLoginModule.impersonate(DefaultLoginModule.java:306)
    at org.apache.jackrabbit.core.security.authentication.AbstractLoginModule.login(AbstractLoginModule.java:330)
    at org.apache.jackrabbit.core.security.authentication.LocalAuthContext.login(LocalAuthContext.java:86)

repository.xml中的安全标签信息

代码语言:javascript
复制
<Security appName="EnterpriseManager">
    <SecurityManager class="org.apache.jackrabbit.core.DefaultSecurityManager">
        <WorkspaceAccessManager class="org.apache.jackrabbit.core.security.simple.SimpleWorkspaceAccessManager"/>
    </SecurityManager>
    <AccessManager class="org.apache.jackrabbit.core.security.DefaultAccessManager"/>
    <LoginModule class="org.apache.jackrabbit.core.security.authentication.DefaultLoginModule">         
        <param name="adminId" value="superuser"/>
    </LoginModule>
</Security>

<Workspace name="${wsp.name}">
    <WorkspaceSecurity>               
        <AccessControlProvider class="org.apache.jackrabbit.core.security.authorization.principalbased.ACLProvider">
            <param name="omit-default-permission" value="true" />
        </AccessControlProvider>
    </WorkspaceSecurity>
</Workspace>

使用JCR 2.0、Jackrabbit 2.6

EN

回答 1

Stack Overflow用户

发布于 2014-09-23 19:48:27

首先需要将模拟授予主体,然后再进行模拟。(虽然有点奇怪)

代码语言:javascript
复制
boolean isGranted = impersonation.grantImpersonation(repoUser.getPrincipal());
System.out.println("Granted impersonation for user? " + isGranted);

SimpleCredentials adminCredentials = new SimpleCredentials(suUser, suPassword.toCharArray());
session = (JackrabbitSession) session.impersonate(adminCredentials);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25830952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档