Security 如何在jackrabbit中更改管理员密码
嗨,我正在使用嵌入式jackrabbit和tomcat。我想将管理员用户的默认密码更改为其他密码,这样它就安全了 我在repository.xml中看到将adminId更新为不同的id,但默认情况下它使用与用户id相同的密码。因此,任何人都可以帮助将密码设置为不同的userid 谢谢 马尼沙 从链接: 使用userManager:Security 如何在jackrabbit中更改管理员密码,security,passwords,admin,jackrabbit,Security,Passwords,Admin,Jackrabbit,嗨,我正在使用嵌入式jackrabbit和tomcat。我想将管理员用户的默认密码更改为其他密码,这样它就安全了 我在repository.xml中看到将adminId更新为不同的id,但默认情况下它使用与用户id相同的密码。因此,任何人都可以帮助将密码设置为不同的userid 谢谢 马尼沙 从链接: 使用userManager: 卷曲\ -F“oldPwd=admin”\ -F“newPwd=Fritz”\ -F“newPwdConfirm=Fritz”\ 您还必须在“Apache Sli
卷曲\
-F“oldPwd=admin”\
-F“newPwd=Fritz”\
-F“newPwdConfirm=Fritz”\
您还必须在“Apache Sling Embedded JCR Repository”下的Felix Web管理控制台(/system/Console/configMgr)中设置该密码。Sling使用该密码为需要完全访问存储库的组件创建管理JCR会话(使用SlingRepository.LoginaAdministrative())
注意:只有在重新启动框架后,旧密码才会失效(从2010年9月11日起)
注意:根据Jackrabbit中使用的登录模块,可能根本不会检查密码(SimpleLoginModule,Jackrabbit中的标准据我所知,在Jackarbbit中没有更改管理员密码的简单方法。使用DefaultLoginModule时,密码存储在“安全”中工作区位于受保护的属性中,因此您无法更改它们。但您可以从Java使用。 我可以用一个简单的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();
}
}
}
另请参见:我尝试了Emanuele的方法,并遵循了本文中的一些说明: 没有什么对我有用。jcr工具:、或 我的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>
JSP页面
你好,世界!
虽然与Emanuele的答案类似,但我实际更改当前管理员密码的唯一方法是使用
org.apache.jackrabbit.j2ee.RepositoryAccessServlet
检索存储库。根据文档(),您可以使用以下设置密码:
<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>
问题只涉及jackrabbit,而不是apache sling