我试图获得特定配置文件的密码,但我很难做到。
我的朋友建议,当我们传递配置文件id时,我们可以获得配置文件信息。有人能告诉我怎么做吗?
下面是我们使用profileId:
所做的代码片段Repository repository = getConnection();
RepositoryView view=repository.getView("user");
RqlStatement stat=RqlStatement.parseRqlStatement("email=?0");
Object param[]={resetEmail};
RepositoryItem[] emailCheck=stat.executeQuery(view, param);
Map profile= new HashMap();
profile.put("userId",profileId);
当我们传递配置文件id时,请帮助我获取配置文件信息。
首先,在ATG中,Profile的密码是散列的,以防止任何恶意攻击者以明文形式读取它。根据您的ATG版本,它将以MD5或SHA-1加一些盐进行散列,因此您将无法看到明文密码。
第二,为什么需要访问密码?如果你有一个特定的要求,比如登录用户,发布出来,我将能够协助。
也就是说,假设您有一个需要访问散列密码的有效场景,如何做到这一点取决于您是否只需要登录用户的密码,还是其他用户的密码。
对于当前登录的用户,只需要解析/atg/userprofiling/Profile组件,然后执行
String password = (String) profile.getPropertyValue("password");
显然,"password"字符串应该用一个常量或Profile propertyManager替换,这取决于你的项目的编码实践。
如果您想要访问任何其他用户的密码(请记住,您不能访问明文密码,只能访问其散列版本),则需要首先找到该用户。/atg/userprofiling/ProfileItemFinder组件有工具来帮助你完成这些,所以你必须将它注入到你正在编写的任何组件中:
RepositoryItem user = profileItemFinder.findByEmail("your@email.com", "user")[0];
String password = (String) user.getPropertyValue("password");
希望对你有帮助。
编辑如果只有配置文件id,则可以在注入/atg/userprofiling/ProfileTools组件后使用以下代码片段:
Profile user = profileTools.findProfile("profile id");
String password = (String) user.getPropertyValue("password");