2011-05-11 64 views
8

您好我正在使用嵌入式jackrabbit与tomcat。我想将admin用户的默认密码更改为其他内容,因此安全可靠。如何更改jackrabbit中的管理员密码

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

感谢 MANISHA

回答

1

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

从链接:

使用的UserManager:

curl \ -F"oldPwd=admin" \ -F"newPwd=Fritz" \ -F"newPwdConfirm=Fritz" \ http://admin:[email protected]:8080/system/userManager/user/admin.changePassword.html

也将在菲利克斯Web管理控制台(以设置密码/ system/console/configMgr)下的“Apache Sling Embedded JCR Repository”。 Sling使用此功能为需要完全访问存储库的组件创建管理JCR会话(使用SlingRepository.loginAdministrative())。

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

注意:根据Jackrabbit中使用的登录模块,根本不会检查密码(SimpleLoginModule,Jackrabbit的标准< = 1.4)。自从Jackrabbit 1.5以来,DefaultLoginModule提供了完整的用户支持。

+0

问题是关于长耳老鼠,而不是apache吊索 – lisak 2011-06-18 10:38:39

2

据我所知,在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

0

我已经试过埃马努埃莱的方法,也跟着一些在这个帖子中的说明: http://jackrabbit.510166.n4.nabble.com/Doubt-with-username-and-password-td3173401.html

没有为我工作。 jcr工具:SPT JCR Manager,jackrabbitexplorer,Toromiro,JCR Explorerphpcr-browser

我的长爪哇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> 

虽然类似于埃马努埃莱的答案,只有这样我实际上可以更改当前的管理员密码是使用org.apache.jackrabbit.j2ee.RepositoryAccessServlet检索存储库。