解锁并重置 Active Directory 密码 Coldfusion

2024-01-10

我使用 CFLDAP 创建了一个下拉列表。下拉菜单是我将允许其进行密码解锁和重置的用户名。

<div id="DESDD" class="form-group" style="display:none;">
                    <select name="DES" id="DES" class="form-control">
                        <option value="" selected>Please select user</option>
                        <cfoutput query="CreateDESDropdown">
                            <option value="#samaccountname#">#cn#</option>
                        </cfoutput>
                    </select>
                </div>

<div id="pass" class="form-group" style="display:none;">
                    <input type="password" name="user_pass" id="user_pass" class="form-control" placeholder="Password" required="">
                </div>
                <div id="sub" class="form-group" style="display:none;">
                    <button type="submit" name="login_user" class="btn btn-primary block full-width m-b">Reset</button>
                </div>

我被困在这里,我不知道如何让用户选择名称并能够输入新密码并在提交时更改活动目录中的密码。

所以基本上我有一个仅允许经理进入的登录页面。然后它将他们带到此页面,该页面是名称和密码输入文本框的下拉列表。带有重置提交按钮。有人可以告诉我如何允许用户从下拉列表中选择一个名称,然后只需输入密码并重置提交吗?

我不知道如何从这里继续下去。

(Apparently posting an image on here is broken) enter image description here

我尝试过的:

<cftry>
    <cfscript>
        // You are going to use  the user's credentials to login to LDAP
        // Assuming your LDAP is set up to do so

        // Set up variables
        newPassword = '"thenewpassword!"';
        oldPassword = '"oldpassword"';
        // You would probably pass in a variable here, I typed it out so you would ss the format its expecting
        newUnicodePassword = newPassword.getBytes("UnicodeLittleUnmarked");
        oldUnicodePassword = oldPassword.getBytes("UnicodeLittleUnmarked");
        ldapsURL = "servername:portnumber";

        // Create a Java Hashtable
        javaEnv = CreateObject("java", "java.util.Hashtable").Init();

        // Put stuff in the Hashtable
        javaEnv.put("java.naming.provider.url", ldapsURL);
        // The user's Full DN and Password
        javaEnv.put("java.naming.security.principal", "#distinguishedName#");
        javaEnv.put("java.naming.security.credentials", "#currentPassword#");
        javaEnv.put("java.naming.security.authentication", "simple");
        javaEnv.put("java.naming.security.protocol", "ssl");
        javaEnv.put("java.naming.factory.initial", "com.sun.jndi.ldap.LdapCtxFactory");

        // Create a Java InitialDirContext
        javaCtx = CreateObject("java", "javax.naming.directory.InitialDirContext").Init(javaEnv);

        // Create two Java BasicAttributes
        oldBA = CreateObject("java", "javax.naming.directory.BasicAttribute").Init("unicodePwd", oldUnicodePassword);
        newBA = CreateObject("java", "javax.naming.directory.BasicAttribute").Init("unicodePwd", newUnicodePassword);

        /***********************************************
        *   Stick the attributes into an Java Array and tell it what to do with them
        *   Guess what? A CF Array = a Java Array
        *   1 = DirContext.ADD_ATTRIBUTE
        *   2 = DirContext.REPLACE_ATTRIBUTE
        *   3 = DirContext.REMOVE_ATTRIBUTE
        *  This is the big trick 
        *   If you login above as an admin then you only need to do a 2 Replace but will not run LDAP passoword policy (lenght, complexity, history... etc.)
        *       It will let you change password to anything
        *   If you want to check the LDAP password policy then you need to create the array and first Remove (3) then Add (1)
        *       Error Code 19 means something in the LDAP password policy was violated
        *           I haven't figured out how to read what the error is (like "password length too short" or "you have used this password in the past")
        *       Error Code 49 means invalid username/password
        ************************************************/
        mods = [
            createObject( "java", "javax.naming.directory.ModificationItem").init(3, oldBA),
            createObject( "java", "javax.naming.directory.ModificationItem").init(1, newBA)
        ]; 
        // Run it
        javaCtx.modifyAttributes(distinguishedName,mods);
        javaCtx.close();
    </cfscript>
    // Yeah! I could have scripted the cfcatch but this was easier.
    <cfcatch>
        <cfif find('error code 19',cfcatch.message)>
            <!--- I am using cfwheels so this just displays a nice error message on the next page --->
            <cfset flashInsert(error="New password does not meet requirements defined in the password rules.")>
        <cfelseif isDefined('cfcatch.RootCause.cause.Explanation') and find('error code 49', cfcatch.RootCause.cause.Explanation)>
            <!--- I am using cfwheels so this just displays a nice error message on the next page --->
            <cfset flashInsert(error="Current Password IS incorrect.")>
        <cfelse>    
            <!--- This just pukes the error up hard and uncaught --->
            <cfrethrow>
        </cfif>
        <cfset hasError = true>
    </cfcatch>  
</cftry>

And:

<cfset new_password = '"thenewpassword"' />
<cfset unicodePwd = new_password.getBytes("UnicodeLittleUnmarked") />

<cfset javaEnv = CreateObject("java", "java.util.Hashtable").Init() />

<cfset ldapsURL = "servername:serverport" />
<cfset javaEnv.put("java.naming.provider.url", ldapsURL) />
<cfset javaEnv.put("java.naming.security.credentials", "oldpassword") />
<cfset javaEnv.put("java.naming.security.authentication", "simple") />
<cfset javaEnv.put("java.naming.security.protocol", "ssl") />
<cfset javaEnv.put("java.naming.factory.initial", "com.sun.jndi.ldap.LdapCtxFactory") />

<cfset javaCtx = CreateObject("java", "javax.naming.directory.InitialDirContext").Init(javaEnv) />
<cfset javaAttr = CreateObject("java", "javax.naming.directory.BasicAttributes").Init("unicodePwd", unicodePwd) />


<cfset javaCtx.close() />

None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解锁并重置 Active Directory 密码 Coldfusion 的相关文章

  • Java Swing:从 JOptionPane 获取文本值

    我想创建一个用于 POS 系统的新窗口 用户输入的是客户拥有的金额 并且窗口必须显示兑换金额 我是新来的JOptionPane功能 我一直在使用JAVAFX并且它是不同的 这是我的代码 public static void main Str
  • Java EE:如何获取我的应用程序的 URL?

    在 Java EE 中 如何动态检索应用程序的完整 URL 例如 如果 URL 是 localhost 8080 myapplication 我想要一个可以简单地将其作为字符串或其他形式返回给我的方法 我正在运行 GlassFish 作为应
  • Java JDBC:更改表

    我希望对此表进行以下修改 添加 状态列 varchar 20 日期列 时间戳 我不确定该怎么做 String createTable Create table aircraft aircraftNumber int airLineCompa
  • 操作错误不会显示在 JSP 上

    我尝试在 Action 类中添加操作错误并将其打印在 JSP 页面上 当发生异常时 它将进入 catch 块并在控制台中打印 插入异常时出错 请联系管理员 在 catch 块中 我添加了它addActionError 我尝试在jsp页面中打
  • Mockito when().thenReturn 不必要地调用该方法

    我正在研究继承的代码 我编写了一个应该捕获 NullPointerException 的测试 因为它试图从 null 对象调用方法 Test expected NullPointerException class public void c
  • 如何为俚语和表情符号构建正则表达式 (regex)

    我需要构建一个正则表达式来匹配俚语 即 lol lmao imo 等 和表情符号 即 P 等 我按照以下示例进行操作http www coderanch com t 497238 java java Regular Expression D
  • 在两个活动之间传输数据[重复]

    这个问题在这里已经有答案了 我正在尝试在两个不同的活动之间发送和接收数据 我在这个网站上看到了一些其他问题 但没有任何问题涉及保留头等舱的状态 例如 如果我想从 A 类发送一个整数 X 到 B 类 然后对整数 X 进行一些操作 然后将其发送
  • 为什么HashMap不能保证map的顺序随着时间的推移保持不变

    我在这里阅读有关 Hashmap 和 Hashtable 之间的区别 http javarevisited blogspot sg 2010 10 difference Between hashmap and html http javar
  • JRE 系统库 [WebSphere v6.1 JRE](未绑定)

    将项目导入 Eclipse 后 我的构建路径中出现以下错误 JRE System Library WebSphere v6 1 JRE unbound 谁知道怎么修它 右键单击项目 特性 gt Java 构建路径 gt 图书馆 gt JRE
  • 使用Caliper时如何指定命令行?

    我发现 Google 的微型基准测试项目 Caliper 非常有趣 但文档仍然 除了一些示例 完全不存在 我有两种不同的情况 需要影响 JVM Caliper 启动的命令行 我需要设置一些固定 最好在几个固定值之间交替 D 参数 我需要指定
  • 如何在控制器、服务和存储库模式中使用 DTO

    我正在遵循控制器 服务和存储库模式 我只是想知道 DTO 在哪里出现 控制器应该只接收 DTO 吗 我的理解是您不希望外界了解底层域模型 从领域模型到 DTO 的转换应该发生在控制器层还是服务层 在今天使用 Spring MVC 和交互式
  • 仅将 char[] 的一部分复制到 String 中

    我有一个数组 char ch 我的问题如下 如何将 ch 2 到 ch 7 的值合并到字符串中 我想在不循环 char 数组的情况下实现这一点 有什么建议么 感谢您花时间回答我的问题 Use new String value offset
  • Google App Engine 如何预编译 Java?

    App Engine 对应用程序的 Java 字节码使用 预编译 过程 以增强应用程序在 Java 运行时环境中的性能 预编译代码的功能与原始字节码相同 有没有详细的信息这是做什么的 我在一个中找到了这个谷歌群组消息 http groups
  • 如何从终端运行处理应用程序

    我目前正在使用加工 http processing org对于一个小项目 但是我不喜欢它附带的文本编辑器 我使用 vim 编写所有代码 我找到了 pde 文件的位置 并且我一直在从 vim 中编辑它们 然后重新打开它们并运行它们 重新加载脚
  • 静态变量的线程安全

    class ABC implements Runnable private static int a private static int b public void run 我有一个如上所述的 Java 类 我有这个类的多个线程 在里面r
  • 编译器抱怨“缺少返回语句”,即使不可能达到缺少返回语句的条件

    在下面的方法中 编译器抱怨缺少退货声明即使该方法只有一条路径 并且它包含一个return陈述 抑制错误需要另一个return陈述 public int foo if true return 5 鉴于Java编译器可以识别无限循环 https
  • Firebase 添加新节点

    如何将这些节点放入用户节点中 并创建另一个节点来存储帖子 我的数据库参考 databaseReference child user getUid setValue userInformations 您需要使用以下代码 databaseRef
  • 捕获的图像分辨率太大

    我在做什么 我允许用户捕获图像 将其存储到 SD 卡中并上传到服务器 但捕获图像的分辨率为宽度 4608 像素和高度 2592 像素 现在我想要什么 如何在不影响质量的情况下获得小分辨率图像 例如我可以获取或设置捕获的图像分辨率为原始图像分
  • JGit 检查分支是否已签出

    我正在使用 JGit 开发一个项目 我设法删除了一个分支 但我还想检查该分支是否已签出 我发现了一个变量CheckoutCommand但它是私有的 private boolean isCheckoutIndex return startCo
  • 使用 xpath 和 vtd-xml 以字符串形式获取元素的子节点和文本

    这是我的 XML 的一部分

随机推荐

  • Android 项目未解析任何静态资源

    由于某种原因 我的 android 项目无法解析 js css 图像的任何静态路径 而它在 web 和 ios 上运行良好 我没有使用离子 所以也许我错过了一些特定的东西 然而 所有这些文件都可以在 android 项目中使用 这是突出显示
  • 训练 Keras 模型会产生多个优化器错误

    所以我需要使用我自己的数据集重新训练 Tiny YOLO 我正在使用的模型可以在这里找到 keras yolo3 https github com qqwweee keras yolo3 我开始训练 遇到多个优化器错误 添加了错误代码以防止
  • Java 中的 Process.exitValue()

    下面是我用来简单地从命令行程序打开和关闭 Internet Explorer 的程序 我在 Windows XP 操作系统上使用 Java 6 运行我的程序 Runtime runtime Runtime getRuntime Proces
  • PHPUnit 严格模式 - 如何更改默认超时

    我想继续在严格模式下运行我的单元测试 以便我可以轻松地了解任何异常长的测试 但同时 1 秒的默认超时是不够的 我可以为所有测试更改它吗 我知道我可以使用以下命令为每个课程 和单独的测试 设置超时 short medium long注释 但是
  • 模型不学习

    背景 我有一个非常简单的脚本 它创建了一个 keras 模型 旨在充当异或门 我在中生成了 40000 个数据点get data功能 它创建两个数组 一个按某种顺序包含 1 和 0 的输入数组 以及一个 1 或 0 的输出 Issue 当我
  • 如何在手机上安装特定版本的 Android 进行测试?

    我的老板最近给了我一部 HTC Wildfire 手机 用于制作我们的一个移动应用程序的 Android 版本 这一切都很好 只是该应用程序需要 API 级别 8 即 Android 2 2 而手机本身只有 Android 2 1安装 经过
  • 如何处理Retrofit 2.0中的错误

    我想处理 Retrofit 2 0 中的错误 得到例如code 404 and body null but errorBody 包含数据在ErrorModel Boolean status and String info This is e
  • 如何优雅地调用名称保存在变量中的 Perl 子例程?

    我将要在运行时调用的子例程的名称保存在名为 action 的变量中 然后我用它在正确的时间调用该子程序 action 工作正常 我唯一不喜欢的是它很丑 每次我这样做时 我都觉得有义务为下一个开发人员添加评论 call the sub by
  • 如何返回 WKWebView 历史记录中的起点

    我正在尝试找到一种方法来向后跳转到起点WKWebView历史 假设我有一个主页 起始页 WKWebView init 并带有指向 google com 的链接 所以我点击链接 然后点击下一步谷歌网站我点击另一个链接谷歌地图 所以我距离起始页
  • 已安装 JSON Server 但显示消息 Command Not Found

    我已经通过 npm 在其他计算机上安装了 json server 但在我的 MacBook Pro 上 命令运行成功 当我执行命令 json server db json 时 会显示以下消息 Errors Screenshot https
  • 在 Windows 7 中找不到 HAXM 设备

    我正在尝试使用 Android Studio 开发移动应用程序 但我总是收到一条带有以下消息的弹出消息 运行此 AVD 需要 Intel HAXM 未找到 HAXM 设备 在 BIOS 安全设置中启用 VT x 确保 HAXM 正确安装 如
  • LaTex写中文的最佳组合是什么? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 有人推荐xelatex 但有人坚持latex CJK 哪个更喜欢 谢谢 我使用 LaTeX CJK 效果很好 确保您的文本编辑器支持 unicode
  • 照片上传 getimagesize() 警告 - 文件名不能为空

    我遇到了一个难题 想知道是否有人能够给我一个直接的答案 所以我使用 PHP MySQL 构建了一个照片上传脚本 在脚本中 照片在上传时会被重新调整大小并被赋予临时名称 我使用几张图片 文件大小 220 KB 960 x 720 对其进行了测
  • 如何仅显示 Visual Studio 2010 (TFS) 中当前打开的解决方案的待定更改,而不显示所有更改的完整列表?

    有没有办法强制 Visual Studio 2010 仅显示当前打开的解决方案的待定更改 我正在处理同一项目的多个分支 并更改大多数分支中的相同文件 每次手动检查待处理的更改并仔细检查是否选择了当前正在处理的文件是非常痛苦的 打开挂起的更改
  • 如何使用匿名结构声明变量

    下面的代码无法编译 我可以理解为什么 但无论如何我都需要让它工作 最好是以符合标准的方式 extern const struct int x a const struct int x a 1 编译器会说 错误 a 的类型冲突 即使类型相同
  • 带有突出显示文本的 JavaFX TableView

    我想突出显示显示在JavaFX TableView 到目前为止我正在使用Text对象在TextFlow对象 为了突出显示文本中的特定部分 我使用标签将文本分成几部分 javafx scene text对象 使用以下代码突出显示或不突出显示
  • Observable:按时间间隔获取最新值,直到源完成

    我正在寻找一个具有类似于以下签名的可观察选择器 static IObservable
  • Levenberg-Marquardt 算法和 ODR 之间的区别

    I was able to fit curves to a x y dataset using peak o mat http qceha net as shown below Thats a linear background and 1
  • SQL:根据用户注册表和事件日志计算第一天保留率

    我需要按用户注册日期计算第一天的留存率 第 1 天留存率定义为注册日期 1 天后返回的用户数量除以注册日期当天注册的用户数量 这是用户表 CREATE TABLE registration user id SERIAL PRIMARY KE
  • 解锁并重置 Active Directory 密码 Coldfusion

    我使用 CFLDAP 创建了一个下拉列表 下拉菜单是我将允许其进行密码解锁和重置的用户名 div class form group style display none div