【问题标题】:How to change the admin password in jackrabbit如何在jackrabbit中更改管理员密码
【发布时间】:2011-08-23 14:14:18
【问题描述】:

您好,我正在使用带有 tomcat 的嵌入式长耳兔。我想将管理员用户的默认密码更改为其他密码,以确保安全。

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

谢谢 玛尼莎

【问题讨论】:

    标签: security passwords admin jackrabbit


    【解决方案1】:

    根据文档 (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>
    

    【讨论】:

      【解决方案2】:

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

      没有什么对我有用。 jcr 工具都不是:SPT JCR ManagerjackrabbitexplorerToromiroJCR Explorerphpcr-browser

      我的 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 检索存储库。

      【讨论】:

        【解决方案3】:

        据我所知,在 Jackarbbit 中没有简单的方法可以更改管理员密码。使用 DefaultLoginModule 时,密码存储在受保护属性的“安全”工作区中,因此您无法更改它们。但是您可以使用 Java 中的Jackrabbit ACL API methods。 我可以使用简单的 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

        【讨论】:

          【解决方案4】:

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

          来自链接:

          使用用户管理器:

          卷曲\ -F“旧密码=管理员”\ -F“新密码=弗里茨”\ -F"newPwdConfirm=Fritz" \ http://admin:admin@localhost:8080/system/userManager/user/admin.changePassword.html

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

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

          注意:根据 Jackrabbit 中使用的登录模块,可能根本不检查密码(SimpleLoginModule,Jackrabbit

          【讨论】:

          • 这个问题只是关于jackrabbit,而不是apache sling
          猜你喜欢
          • 1970-01-01
          • 2018-08-09
          • 2021-10-18
          • 1970-01-01
          • 2014-04-29
          • 2022-03-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多