如何在杰克兔中更改管理员密码



嗨,我正在使用带有雄猫的嵌入式杰克兔。我想将管理员用户的默认密码更改为其他密码,以便安全可靠。

我在存储库中看到.xml将 adminId 更新为不同 id 的地方,但默认情况下它采用与用户 ID 相同的密码。 任何人都可以帮助将密码设置为不同的用户 ID。

谢谢马尼莎

据我所知,在Jackarbbit中没有简单的方法可以更改管理员密码。使用 DefaultLoginModule 时,密码存储在受保护属性的"安全"工作区中,因此您无法更改它们。但是你可以使用Java中的Jackrabbit ACL API方法。我能够使用一个简单的java类更改密码,如下所示:

import org.apache.jackrabbit.api.JackrabbitSession;
import org.apache.jackrabbit.api.security.user.Authorizable;
import org.apache.jackrabbit.api.security.user.User;
import org.apache.jackrabbit.api.security.user.UserManager;
import org.apache.jackrabbit.core.TransientRepository;
import javax.jcr.Repository;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.SimpleCredentials;
import java.io.File;
public class Main {
    public static void main(String[] args) {
        Repository repository = new TransientRepository(new File("path_to_jackrabbit_home_dir"));
        try {
            Session session = repository.login(new SimpleCredentials("admin", "admin".toCharArray()));
            UserManager userManager = ((JackrabbitSession) session).getUserManager();
            Authorizable authorizable = userManager.getAuthorizable("admin");
            ((User) authorizable).changePassword("newpassword");
            session.save();
            session.logout();
        } catch (RepositoryException e) {
            System.out.println("Auth error.");
            e.printStackTrace();
        }
    }
}

另请参阅:http://jackrabbit.510166.n4.nabble.com/Doubt-with-username-and-password-td3173401.html

https://cwiki.apache.org/confluence/display/SLING/FAQ

从链接:

使用用户管理器:

curl -F"oldPwd=admin" -F"newPwd=Fritz" -F"newPwdConfirm=Fritz" http://admin:admin@localhost:8080/system/userManager/user/admin.changePassword.html

您还必须在Felix Web管理控制台(/system/console/configMgr)的"Apache Sling Embedded JCR存储库"下设置该密码。Sling使用它为需要对存储库具有完全访问权限的组件创建管理员JCR会话(使用SlingRepository.loginAdministrative())。

注意:只有在重新启动框架后,旧密码才会失效(截至 09-11-10)。

注意:根据 Jackrabbit 中使用的登录模块,密码可能根本不会被选中(SimpleLoginModule,Jackrabbit <= 1.4 中的标准)。从Jackrabbit 1.5开始,DefaultLoginModule提供了完整的用户支持。

我已经尝试了Emanuele的方法,并遵循了这篇文章中的一些说明:http://jackrabbit.510166.n4.nabble.com/Doubt-with-username-and-password-td3173401.html

什么都不适合我。JCR工具:SPT JCR Manager,jackrabbitexplorer,Toromiro,JCR Explorer或phpcr-browser。

My Jackrabbit webapp (3.0-SNAPSHOT) 部署在 tomcat7 中,aws 作为数据存储,derby 作为持久性管理器。

经过几个小时的挣扎,唯一对我有用的解决方案是调用这个简单的jsp文件,该文件以前放在Web应用程序根目录中:

<%@ page import="org.apache.jackrabbit.api.JackrabbitSession,
                     org.apache.jackrabbit.api.security.user.Authorizable,
                     org.apache.jackrabbit.api.security.user.User,
                     org.apache.jackrabbit.api.security.user.UserManager,
                     org.apache.jackrabbit.core.TransientRepository,
                     javax.jcr.Repository,
                     javax.jcr.Session,
                     javax.jcr.SimpleCredentials,
                     java.io.File,
                     org.apache.jackrabbit.commons.JcrUtils,
                     org.apache.jackrabbit.j2ee.RepositoryAccessServlet"
 %>
<%
Repository repository;
try {
    repository = RepositoryAccessServlet.getRepository(pageContext.getServletContext());
    Session jackrabbitSession = repository.login(new SimpleCredentials("admin", "oldpass".toCharArray()));
            UserManager userManager = ((JackrabbitSession) jackrabbitSession).getUserManager();
            Authorizable authorizable = userManager.getAuthorizable("admin");
            ((User) authorizable).changePassword("newpass");
            jackrabbitSession.save();
            jackrabbitSession.logout();    
} catch (Throwable e) {
    %><jsp:forward page="bootstrap/error.jsp"/><%
}
request.setAttribute("title", "Apache Jackrabbit JCR Server");
%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <h1>Hello World!</h1>
    </body>
</html>

尽管与 Emanuele 的答案相似,但我实际可以更改当前管理员密码的唯一方法是使用 org.apache.jackrabbit.j2ee.RepositoryAccessServlet 检索存储库。

根据文档 (http://jackrabbit.apache.org/jcr/jackrabbit-configuration.html),您可以使用以下命令设置密码:

<param name="password" value="test"/>

例:

<LoginModule class="org.apache.jackrabbit.core.security.authentication.DefaultLoginModule">
           <!-- 
              anonymous user name ('anonymous' is the default value)
            -->
           <param name="anonymousId" value="anonymous"/>
           <!--
              administrator user id (default value if param is missing is 'admin')
            -->
           <param name="adminId" value="newUser"/>
           <param name="password" value="newPassword"/>
</LoginModule>

相关内容

  • 没有找到相关文章

最新更新