嗨,我正在使用带有 tomcat 的嵌入式长耳兔。我想将管理员用户的默认密码更改为其他密码,以确保安全。
我在 repository.xml 中看到将 adminId 更新为不同的 id,但默认情况下它使用与用户 id 相同的密码。所以任何人都可以帮助为不同的用户ID设置密码。
谢谢玛尼莎
嗨,我正在使用带有 tomcat 的嵌入式长耳兔。我想将管理员用户的默认密码更改为其他密码,以确保安全。
我在 repository.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
您还必须在“Apache Sling Embedded JCR Repository”下的 Felix Web 管理控制台 (/system/console/configMgr) 中设置该密码。Sling 使用它为需要对存储库具有完全访问权限的组件创建管理 JCR 会话(使用 SlingRepository.loginAdministrative())。
注意:只有在重新启动框架后,旧密码才会失效(截至 10 年 9 月 11 日)。
注意:根据 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。
我的 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>