在Domino中修改AD密码

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情
前面要做的安装配置步骤请参考我以前的文章。

1.首先需要修改Domino服务器的配置。
1)将dominoad.keystore拷贝至服务器Domino根目录下。
2)修改Domino的jvm里的java.policy文件,在grant下添加下面两行:
permission java.util.PropertyPermission "javax.net.ssl.trustStore", "write";
permission java.util.PropertyPermission "javax.net.ssl.trustStorePassword", "write";
3)全部完成后,重启Domino服务器才可生效。

2.使用java agent实现,在domino中添加一代理,代码如下:
Java agent code:
import lotus.domino.*;
import java.io.IOException;
import java.net.UnknownHostException;
import java.util.Hashtable;
import javax.naming.*;
import javax.naming.ldap.*;
import javax.naming.directory.*;

public class JavaAgent extends AgentBase {
private LdapContext ctx = null;
private String adminName = "ldapadmin@testad.com.cn";
private String adminpassword = "123456";
private String keystore = "D:/Lotus/Domino/dominoad.keystore";
private String keyPassword = "changeit";
private String ldapURL = "ldaps://ldap.testad.com.cn:636";
private String searchBase = "DC=testad,DC=com,DC=cn";
private String returnedAtts[] = { "distinguishedName" };

private boolean initial_Ldap() {

Hashtable env = new Hashtable();
System.setProperty("javax.net.ssl.trustStore", keystore);
System.setProperty("javax.net.ssl.trustStorePassword", keyPassword);
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, adminName);
env.put(Context.SECURITY_CREDENTIALS, adminpassword);
env.put(Context.SECURITY_PROTOCOL, "ssl");
env.put(Context.PROVIDER_URL, ldapURL);

try {
System.out.println("Start InitialLdapContext");
ctx = new InitialLdapContext(env, null);
System.out.println("InitialLdapContext succeed");
} catch (NamingException e) {
System.out.println("Problem initial_Ldap NamingException: " + e);
return false;
}

return true;
}

private boolean close_Ldap() {
System.out.println("Close Ldap");
try {
ctx.close();
} catch (NamingException e) {
System.out.println("Problem close_Ldap NamingException: " + e);
return false;
}
return true;
}

private String search_distinguishedName(String username) {
String searchFilter = "(&(objectClass=user)(cn=" + username + "))";

try {
System.out.println("Start search " + username
+ "'s distinguishedName");
SearchControls searchCtls = new SearchControls();
searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);
searchCtls.setReturningAttributes(returnedAtts);
NamingEnumeration answer = ctx.search(searchBase, searchFilter,
searchCtls);
if (answer.hasMoreElements()) {
SearchResult sr = (SearchResult) answer.next();
Attributes attrs = sr.getAttributes();
if (attrs != null) {
NamingEnumeration ae = attrs.getAll();
Attribute attr = (Attribute) ae.next();
NamingEnumeration e = attr.getAll();
return (String) e.next();
}
}
} catch (NamingException e) {
System.out
.println("Problem search_distinguishedName NamingException: "
+ e);
return "error";
}

return "none";
}

private boolean mod_Pwd(String username, String password) {
ModificationItem[] mods = new ModificationItem[1];
String newQuotedPassword = "/"" + password + "/"";

try {
System.out.println("Start reset password");
byte[] newUnicodePassword = newQuotedPassword.getBytes("UTF-16LE");
mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE,
new BasicAttribute("unicodePwd", newUnicodePassword));
ctx.modifyAttributes(username, mods);
System.out.println("Finish reset password" + username);
} catch (UnsupportedEncodingException e) {
System.out.println("Problem mod_Pwd UnsupportedEncodingException: "
+ e);
return false;
} catch (NamingException e) {
System.out.println("Problem mod_Pwd NamingException: " + e);
return false;
}

return true;
}

public void NotesMain() {

try {
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
Document doc = agentContext.getDocumentContext(); 
String tUserName = doc.getFirstItem("usernameEdit").getText();
String tPassWord = doc.getFirstItem("newpwdEdit").getText();

JavaAgent jP=new JavaAgent();
if (jP.initial_Ldap()) {
String username = jP.search_distinguishedName(tUserName);
jP.mod_Pwd(username, tPassWord);
jP.close_Ldap();
}
} catch(Exception e) {
e.printStackTrace();
}
}
}

3.如果要在Web页面上调用,此Java代理权限需如下设置:

这个设置基本把权限控制降到最低了,应该不需要开放这么多权限,读者可以自己再试试。
注:Domino中对java agent的支持似乎有问题,有时若发现对java代码所做的改动无法生效,请重启Domino服务。

MAX31865模块温度测量 本文主要介绍MAX31865 测温注意事项,并写出读取温度的示例代码,模块详细参数可以查阅相关手册, 阅读详情

相关推荐

把雷达强度特征融合于 Cartographer的实现流程 :从地图构建到在线定位

摘要:本文提出在激光SLAM中融合强度特征的方法,解决几何匹配在退化环境中的失效问题。详细介绍了两种高反地图生成方式:离线使用assets_writer工具处理优化轨迹,在线实时累积高反点;以及权重网格的构建与预计算金字塔方法。定位阶段通过加权得分公式融合几何和强度信息,采用自适应缩放策略平衡特征依赖。该方案在不显著增加计算负担的前提下,有效提升了对称环境等退化场景的定位稳定性,对利用人工路标的移动机器人具有实用价值。

Studying…… 1315

Domino的Ldap服务与使用

LDAP 服务 LDAP(轻型目录访问协议)是搜索和管理某个目录中的项目的标准 Internet 协议,其中项是指与专有名称关联的一个或多个属性。专有名称(例如,cn=Phyllis Spera、ou=Sales、ou=East、o=Acme)是在目录树中唯一确定项的名称。目录可以包含许多类型的项,例如,用户、群组、设备和应用程序数据的项。商业 Internet 客户机(如 Netscape

5165

lammps案例:堆垛层错能的计算

大家好,我是小马老师。 本文介绍如何使用lammps计算晶体的堆垛层错能。 正常晶体中的原子按照一定的规律排列,原子面按ABCABC……的顺序排列,如下图所示: 当某个原子面被抽出后会形成堆垛层错,如图中的蓝色原子层被抽出,原子面排列变为ABCBCA……: 可通过计算堆垛层错能形成前后的能量差计算堆垛层错能,计算公式为: E0为初始能量 Ef为删除一个原子面后的能量 A为界面面积 下面分享一个lammps计算堆垛层错能的in代码,本代码由Richard Glaze完成,本文稍作修改并进行了注释,以供初

lammps_jiayou的博客 5404

在 Lotus Domino 8.5 ID Vaullt 中编写密码重置程序

Lotus Notes 用户忘记用户 ID 的密码是时有发生的事情,IDRecovery 机制提供了密码重置的功能,但需要由管理员手动完成,这既浪费人力与时间也增加了重置密码被外泄的可能性。Lotus Domino 8.5 中引...

cuinaozun7188的博客 508

代码程序实现域密码domino密码的统一性及权限控制和日志统计功能

web方式重置域密码及后台同步domino密码的的权限控制及日志统计前面的文件咱们分别介绍了,通过web方式重置domino邮箱用户的internet密码、web方式重置域密码等功能及重置域密码后台重置domino密码的internet,来保证域密码和邮箱密码统一性;因为作为管理员来说重置密码是家常便饭,但是安全也是必需考...

有伊说一 197

Java bean 详解

JavaBean 是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,set和get方法获取。众所周知,属性名称符合这种模式,其他Java 类可以通过自省机制(反射机制)发现和操作这些JavaBean 的属性。

qq_39273039的博客 1万+

初识Java Bean

目录 Java Bean Java Bean的基本概念 Java Bean的特性 一个规范的Java Bean例子 Serializable四问 Serializable是什么? 什么是序列化? 为什么要序列化? 什么情况下需要使用序列化? JSP中使用Bean 设置Bean属性 语法形式 属性说明 直接利用表达式设置Bean的属性 通过表单参数名设置Bean的属性值 获取Bean属性 Bean的作用域 四个周期的例子 演示Bean的request生命周期 演..

zhyy-ang的博客 5314

0307.使用SPNEGO实现DominoAD单点登录

1. 应用背景 伴随着 domino 8.5.1 (或更高版本)对 SPNEGO(Simple and Protected GSSAPI Negotiation Mechanism)单点登录的支持,使用 SPNEGO 单点登录,用户只需在自己的客户端上登陆到 Windows 的域中,就可以用浏览器直接访问 Domino 服务器资源而不用再次提供用户名称和密码。本文将详细介绍 Domino 自身实...

weixin_33862188的博客 312

修改Internet用户密码后,如何使之立即生效

用户在浏览器中修改自己的登录密码后,要在Domino服务中的HTTP重启才能生效。我想知道有没有其它的方法让HTTP服务不重启即可生效?因为如果在每次修改后都重启一下的话,会影响其它的用户使用==============================================1tell adminp process all2show nlcache reset3...

ama7449的博客 388

Domino中的AD用户相关操作

大家好,才是真的好。 上一章我们讲到Domino V11和活动目录同步的配置,经过配置后,可实现从Notes中识别和发邮件给对应的AD账户。不过,如要在Domino中为这些AD用户创建邮箱和密码,还需要进行一步进行操作。 一、非注册改名同步 经过同步配置后,如AD用户改名,等待一段时间,Domino中就会同步过来。如下图所示: 我们观察Domino中的DirSync任务同步是会拉取该用户新名...

XZZ_2018的博客 561

0301.Lotus Domino与Windows AD帐户同步和SSO

介绍 当客户环境中已存在Microsoft Active Directory(简称AD),而且依赖于AD已有许多应用。客户要求使用AD现有用户登录至Domino中。 从AD中通过Domino ADSYNC服务同步至Domino中时,请注意以下: 不能自动进行同步,每次同步信息需要管理员干涉; 不能同步密码 同步信息中不会有等价名属性,某些应用需要用户名Notes英文名(...

ama7449的博客 184

实现微软ADDomino OA系统的互连互用

1. 用户需求与面临的问题     当前用户已有MS Active Directory Server(简称:AD)作为统一用户管理平台。AD对多个应用的用户验证和用户的基本信息进行维护,其中包括对用户的新增、重名、删除、信息修改用户组的维护。     IBM Lotus Domino 平台是业界流行的办公自动化(简称:OA),为企业快速建立其符合企业要求和管理思路的办公自动化软

hi! 幡冉壳 1443

DominoAD账户同步(二)

AD服务器同步Domino账户 在第一章中,笔者向大家介绍了由AD服务器向Domino同步账户的情况。反之,由DominoAD服务器同步账户也是可以进行的。当然,我们所说的账户同步是对names库而言的。 首先,让我们来看看配置参数。此处配置参数会根据同步方向的变化自动显隐。这是因为向Domino同步和向AD同步时,需要的参数是不一样的,因此笔者决定为了使用者更方便,将不需要的

北京老苏的专栏 997

通过代码程序实现域密码Domino密码同步

前两篇文章主要介绍了两个功能:1:域密码修改流程;2.web方式重置邮箱密码;今天主要介绍将这两个服务结合,实现域密码domino密码同步;做法很简单,但是也有很多局限性; 公司环境,AD+Domino8.5.1 我们公司的人数比较多,大多数人员属于外派,而且经常不使用邮箱,偶尔用一下,但是经常使用erp系统,erp系统跟域是集成的;使用Domino8...

weixin_34260991的博客 294

忘掉Domino的认证吧,打造自己的认证系统

我们都知道Domino服务器的认证是封闭不开放的,Domino系统都是通过定制开发的domcfg.nsf数据库实现登录界面。但其实大多数时候,我们想用自己的认证系统代替Domino平台自己的。当然,这是不可实现的。不过,IBM还是提供了一个DSAPI接口,但它必须用C语言编写。问题搞大了,干嘛还必须用C语言啊?就不会编个Java 的接口吗?发牢骚是没用的,想别的辙吧!

北京老苏的专栏 1019

烂泥:DominoAD集成测试文档(二)

本文首发于烂泥行天下,由秀依林枫提供友情赞助 四、Domino的搭建与配置 1、 Domino Server及其相关软件的安装 我们现在以Domino 8.5.2 32bit为例进行测试。开始Domino的安装。 软件许可协议 程序安装目录 数据安装目录 选择安装类型 确认安装 安装完成 以上是Domino Server的安装,下面我们就开...

weixin_33860147的博客 157

Domino9下通过代理实现WEB方式重置Internet密码

说到密码重置工作,最让管理员头疼,尤其每天需要修改或重置大量的密码;大家都了解,Domino密码分为notes密码和Internet密码;两个密码是不一样的,但是可以设置让两个密码同步;默认是不同步的;我们公司使用的是Domino8.5.1,但是收发邮件是通过outlook进行配置收发,而不是notes client,所以呢,管理员重置密码需要通过not...

weixin_34221036的博客 404
上一篇: 配置AD、CA、SSL,绑定keystore
下一篇: 在RAD7中开发JSR168 Portlet (一)
freewind88
博客等级 码龄24年 10粉丝 31原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值