java ldap操作实例_Java Spring Security示例教程中的2种设置LDAP Active Directory身份验证的方法...

java ldap操作实例

LDAP身份验证是世界上最流行的企业应用程序身份验证机制之一,而Active Directory (Microsoft为Windows提供的LDAP实现)是另一种广泛使用的LDAP服务器。 在许多项目中,我们需要通过登录屏幕中提供的凭据使用LDAP对活动目录进行身份验证 。 有时,由于实现和集成过程中会遇到各种问题, 并且没有进行LDAP身份验证的标准方法,因此此简单任务会变得棘手。 Java提供了LDAP支持,但是在本文中,我将主要讨论spring安全性,因为它是我首选的Java框架,用于进行身份验证,授权和安全性相关的工作。

通过编写用于执行LDAP搜索然后进行LDAP绑定的程序,我们可以在Java中做同样的事情,但是正如我所说的,当您使用Spring Security进行LDAP身份验证时,它变得更加容易和简洁。

除了LDAP支持外,Spring Security还提供了企业Java应用程序所需的其他一些功能,包括SSL安全性,密码加密和会话超时功能。

1. LDAP认证基础

在深入了解Active Directory上的LDAP身份验证之前,让我们熟悉一些LDAP术语,因为大多数时间用户是第一次使用它,并且他们对典型的LDAP词汇表(例如Dn,Ou,Bind或搜索等)不太熟悉。
Dn –专有名称 ,唯一名称,用于在LDAP服务器(例如Microsoft Active Directory)中查找用户。
OU –组织单位 绑定– LDAP绑定是一种操作,其中LDAP客户端将bindRequest发送给包括用户名和密码在内的LDAP用户,并且如果LDAP服务器能够正确找到用户名和密码,则它允许访问LDAP服务器。 搜索– LDAP搜索是通过使用某些用户凭证来检索用户的Dn的操作。 – LDAP目录的顶部元素,例如树的根。 BaseDn – LDAP树中的一个分支,可用作LDAP搜索操作的基础,例如dc = Microsoft,dc = org

如果您想了解有关LDAP的更多信息,请查看此链接,其中包含有关LDAP的详细信息。

2. Active Directory Spring Security中的LDAP身份验证

在Spring安全性中,有两种方法可以使用LDAP协议实现活动目录身份验证,第一种方法是编程和声明性方法,需要一些编码和一些配置。

另一方面,第二种方法是Spring Security提供的现成解决方案,只需配置ActireDirectoryAuthenticationProvider ,就可以完成。 我们将看到两种方法,但是我建议使用第二种方法,因为第二种方法简单易用。

2.1在Spring Security中使用LDAP进行Active Directory身份验证-示例1

组态
将以下配置添加到您的spring application-context.xml文件中,我建议将此配置与其他与安全相关的内容一起放在单独的application-context-security.XML文件中。
1)配置LDAP服务器 为了配置LDAP服务器,请将以下XML代码段放入Spring安全配置文件中:

<s:ldap-server url="ldap://stockmarket.com"   //ldap urlport="389"                    //ldap portmanager-dn="serviceAcctount@sotckmarket.com" //manager usernamemanager-password="AD83DgsSe"                 //manager password
/>

此配置是不言自明的,但是有关管理器dn和密码, 活动目录或任何其他LDAP目录上的LDAP身份验证的简短说明仅需两步,首先需要执行LDAP搜索以找到用户的Dn(专有名称),然后进行LDAP搜索。然后该Dn用于执行LDAP绑定。

如果绑定成功,则用户身份验证成功,否则它将失败。 有些人比LDAP绑定更喜欢密码的远程比较 ,但是LDAP绑定是您最不希望做的事情。

Active Directory的大部分内容都不允许匿名搜索操作,因此,要执行LDAP搜索,您的服务必须具有LDAP帐户,这是我们在此提供的manager-in和manager-password.property。
Summary中 ,现在将通过以下步骤完成LDAP登录:

  1. 您的服务或应用程序使用manager-dn和manager-password与LDAP绑定。
  2. LDAP搜索用户以找到UserDn
  3. 使用UserDn进行LDAP绑定

到此完成了LDAP登录部分。 现在,让我们进入配置LDAP身份验证提供程序的下一部分。
2)配置LDAP身份验证提供程序
本节在spring-security中指定了各种身份验证提供程序,在这里您可以看到LDAP身份验证提供程序,并且我们使用userPrincipalName在Microsoft Active目录中搜索用户。

<s:authentication-manager erase-credentials="true">
<s:ldap-authentication-provideruser-search-base="dc=stockmarketindia,dc=trader"user-search-filter="userPrincipalName={0}"
/><s:authentication-provider ref="springOutOfBoxActiveDirecotryAuthenticationProvider"/>
</s:authentication-manager>

现在需要一小段编码来传递userPrincipalName并验证用户。

public boolean login(String username, String password) {AndFilter filter = new AndFilter();ldapTemplate.setIgnorePartialResultException(true); // Active Directory doesn’t transparently handle referrals. This fixes that.filter.and(new EqualsFilter("userPrincipalName", username));return ldapTemplate.authenticate("dc=stockmarketindia,dc=trader", filter.toString(), password);}

第2行在该程序中非常重要,因为我花了一整天的时间来弄清楚我的应用程序何时反复抛出javax.naming.PartialResultException:未处理的连续引用,您也可以对搜索用户使用sAMAccountNameuserPrincipalNamesAMAccountName都是唯一的在Active Directory中。

在此最重要的是,它必须是全名,例如name @ domain,例如jimmy@stockmarket.com。

authenticate()方法将根据绑定操作的结果返回true或false。

2.2在Spring Security中使用LDAP的Active Directory身份验证-更简单的示例

第二种方法更简单,更清洁,因为它是开箱即用的,您只需要配置LDAP服务器URL和域名即可使用,就像奶油一样。

<s:authentication-manager erase-credentials="true"><s:authentication-provider ref="ldapActiveDirectoryAuthProvider"/>
</s:authentication-manager><bean id="ldapActiveDirectoryAuthProvider" 
class="org.springframework.security.ldap.authentication.ad.ActiveDirectoryLdapAuthenticationProvider"><constructor-arg value="stockmarket.com" />  //your domain<constructor-arg value="ldap://stockmarket.com/" />  //ldap url
</bean>

就这样,完成了。 此配置将验证和加载LDAP中所有授予的权限 ,就像您所属的组一样。 这也与spring安全登录元素集成在一起。

2.3依赖

这个示例基于spring security 3.0,我使用的是spring-ldap-1.3.1.RELEASE-all.jar和spring-security-ldap-3.1.0.RC3.jar。

如果您不知道如何下载Spring框架JAR文件,请按照此Spring Framework JAR下载指南中给出的步骤进行操作,该指南说明了如何从Maven Central下载Spring框架和其他相关的JAR。

2.4 LDAP身份验证期间的错误

您需要非常幸运地完成针对Active Directory的LDAP身份验证,而没有任何错误或异常,在这里,我列出了我遇到的一些常见错误及其解决方案,以便快速参考。
1)javax.naming.PartialResultException:未处理的连续引用; 剩余名称'dc = company,dc = com'
发生此错误是因为Microsoft Active Directory无法正确处理引用,并且要解决此问题,请设置此属性

ldapTemplate.setIgnorePartialResultException(true);

2)javax.naming.NameNotFoundException:[LDAP:错误代码32 – No Such Object]; 剩余的名字”
该错误经过反复尝试后得以解决,并且主要是由于用户名格式无效造成的 。 它通过提供全名来解决,例如jemmy@stockmarket.com

2.5工具

LDAP浏览器 :最好使用一些工具来查看LDAP目录中的数据,它可以为您提供一些可见性以及浏览LDAP中数据的方法。

它被称为LDAP浏览器,网络上有很多开源的LDAP浏览器,例如jexplorer。 您可以使用LDAP浏览器浏览和查看Active Directory中的数据。

2.6通过SSL的LDAP Active Directory身份验证

这非常适合对Microsoft活动目录实施LDAP身份验证。 但是您可能要引起注意的一件事是,使用LDAP用户名和密码以明文形式传输到LDAP服务器,任何有权访问LDAP流量的人都可以嗅探用户证书,因此并不安全。

一种解决方案是使用LDAP(基于SSL的LDAP)协议,该协议将加密LDAP客户端和服务器之间的流量。

在spring-security中,这很容易做到,您需要更改的是URL而不是“ ldap://stockmarket.com/ ”,您需要使用“” ldaps://stockmarket.com/ 。 实际上, LDAP的端口是339 ,LDAPS 的端口 是636,但是第二种方法在Spring已得到注意,在第一种方法中,您需要提供此信息。

您可能会遇到的问题是“无法找到到所请求目标的有效认证路径”

异常如下图所示:

javax.net.ssl.SSLHandshakeException:
sun.security.validator.ValidatorException: PKIX path building failed:
sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

此异常的原因很简单, 在SSL握手过程中返回的证书 不由在您的JRE密钥中配置的任何受信任的证书颁发机构(CA) 签名,例如Verisign,Thwate,GoDaddy或entrust等。相反,服务器发送的证书是JRE不知道。

要解决此问题,您需要将Server返回的证书添加到JRE的密钥库中。 顺便说一句,如果您对密钥库和信任库感到困惑,那么请阅读我关于Java中密钥库和信任库之间的区别的文章,以首先了解它。

2. 7我为解决问题所做的工作

毫不奇怪,我使用了一个名为InstallCert.java的开源程序,它仅与您的LDAP服务器和端口一起运行,它将尝试使用SSL连接LDAP服务器,并首先抛出相同的“ PKIX路径构建失败” ,然后抛出LDAP服务器返回的证书。

然后它将要求您将证书添加到密钥库中,只需提供屏幕上显示的证书编号,然后将这些证书添加到C:\ Program Files \ Java \ jdk1.6.0 \ jre \ lib \ security文件夹中的“ jssecacerts ”中。 现在重新运行该程序,该错误必须消失,并且将打印:

"Loading KeyStore jssecacerts...Opening connection to stockmarket.com:636...Starting SSL handshake...No errors, the certificate is already trusted

我们已经完成了,现在,如果您尝试通过LDAPS进行身份验证,您将成功。

即使没有Spring安全性,也可以使用Java 对活动目录执行LDAP认证的其他方法。 但是我发现spring-security非常有用,因此请考虑将其用于您的安全性要求。 如果您在LDAP登录期间遇到任何问题,请告诉我,我们将尽力为您提供帮助。

翻译自: https://www.javacodegeeks.com/2018/04/2-ways-to-setup-ldap-active-directory-authentication-in-java-spring-security-example-tutorial.html

java ldap操作实例

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/333308.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IntelliJ IDEA 修改单行注释的格式

文章目录修改 Java 编码中单行注释的格式修改 HTML 编码中单行注释的格式修改 Java 编码中单行注释的格式 根据下图所示的步骤进行设置&#xff1a; 成功设置后&#xff0c;单行注释的格式如下图所示&#xff1a; 修改 HTML 编码中单行注释的格式

目前的计算机系统属于第三代电子计算机,计算机应用基础判断题

计算机 练习题44、 计算机的硬件系统由控制器、显示器、打印机、主机、键盘组成。( )45、 计算机的内存储器与硬盘存储器相比&#xff0c;内存储器存储量大。( )46、 在计算机中&#xff0c;1000K称为一个M。( )47、 在计算机中&#xff0c;1024B称为一个KB。( √ )48、 计算…

synology smb_用于在Synology NAS上测试Spring Boot Web应用程序的JUnit模拟文件

synology smb对于将在Synology RS815 NAS上检查备份文件的Spring Boot应用程序&#xff0c;我们希望能够轻松测试此NAS上存储的文件&#xff0c;而不必复制存储在其上的7TB。 理想情况下&#xff0c;我们希望创建相同的文件结构以在Spring开发配置文件中使用Web应用程序&…

Sublime Text for Mac如何支持GBK编码

需要安装相关的字符编码插件&#xff0c;你可以安装以下三款插件&#xff1a; 1.ConvertToUTF8 &#xff1a;GBK 转 UTF8 插件 推荐安装这个&#xff0c;这个插件不仅可以解决 GBK 的问题&#xff0c;还可以解决其它的编码问题。 In most cases, this plug-in will take car…

常州全国计算机考点,2017年常州高考考点及考场查询系统

出国留学网高考考场查询频道为大家提供2017年常州高考考点及考场查询系统&#xff0c;更多高考准考证及高考考场信息请关注我们网站的更新!猜你喜欢&#xff1a;进场及出场后一、“穿”“带”双齐进考场。穿着整齐进考场&#xff0c;不要穿拖鞋&#xff0c;背心等。带齐考试用品…

vmware用户名和密码_VMWare vijava –“用户名或密码不正确”异常的奇怪情况

vmware用户名和密码在我参与的一个项目中&#xff0c;我们使用yavijava &#xff08;这是vijava的分支 &#xff09;库与托管我们的VM的vCenter进行交互。 vCenter通过其Web服务端点公开了各种API&#xff0c;这些API通过HTTP调用。 yavijava库具有必要的钩子&#xff0c;允许开…

大学计算机系学生,大学计算机专业学生自我介绍

大学计算机专业学生自我介绍当进入一个新环境&#xff0c;我们不得不需要向他人介绍自己&#xff0c;自我介绍是一种认识自我的手段。那么自我介绍有什么格式呢&#xff1f;以下是小编收集整理的大学计算机专业学生自我介绍&#xff0c;仅供参考&#xff0c;大家一起来看看吧。…

java从数组查找指定整数_如何在Java中使用重复项查找整数数组中的K个缺失数字?...

java从数组查找指定整数自从我讨论任何编码或算法面试问题以来已经有很长时间了&#xff0c;因此我想重新考虑一种最流行的基于数组的编码问题&#xff0c;即在给定数组中查找缺失的数字。 在进行编程工作面试之前&#xff0c;您可能已经听说过或看到过此问题&#xff0c;但是面…

Java代码的执行顺序

代码块的执行顺序如下&#xff1a; 1.静态块 2.父类构造器 3.本类中的块 4.本类的构造器 代码语句执行顺序&#xff1a; 整体是从上到下&#xff0c;从左到右&#xff0c;但是赋值语句&#xff0c;则是从右到左&#xff0c;必须先执行等号右边的语句得到值&#xff0c;再声明…

百度feeds联盟软件测试开发,UI 自动化测试用例整理举例-百度首页

前言现在分享下如何进行用例整理和组合管理。例子&#xff1a;以喜闻乐见的 百度 首页为例吧。场景分析&#xff1a;1. 测试点&#xff1a;百度首页&#xff0c;我们可以设定红色部分为测试点&#xff1a;共用 7 个测试点&#xff1a;测试搜索功能是否正常。测试右上 6 个常用链…

jdk8读取文件_用于从文件读取/写入文件的新JDK 11文件方法

jdk8读取文件我之前的文章重点讨论了可能添加到JDK 11中的Files.isSameContent()方法。 JDK-8201276 [“&#xff08;fs&#xff09;向文件添加方法以从文件读取字符串或向文件写入字符串”]提到了此新方法&#xff0c;并重点介绍了本文的主题&#xff1a; readString(Path) …

IntelliJ IDEA for Mac如何通过指定的关键字查找/搜索类文件

查找对话框 按下组合键 <Shift-Command-F> 打开查找对话框&#xff0c;如下图所示&#xff1a; 匹配模式 Match case&#xff1a;区分大小写 Words&#xff1a;匹配完整的单词 例如&#xff0c;我要在下面的文本中匹配搜索 liaowenxiong Regex&#xff1a;正则表达式…

计算机活动天窗,玩出花样,天窗的正确打开方式

最近&#xff0c;一位妈妈因天窗而走红&#xff0c;甚至还引发了新一轮父母育儿方式的热烈探讨&#xff0c;车叔很疑惑&#xff0c;这天窗到底怎么了&#xff1f;原来&#xff0c;这位年轻妈妈为引导不愿上学的孩子去上学&#xff0c;灵机一动&#xff0c;采取了有别于打骂或哄…

input发送a.jax_与时俱进:在JAX-RS API中采用OpenAPI v3.0.0

input发送a.jax看到时间流逝如此之快&#xff0c;真是太恐怖了&#xff01; OpenAPI规范3.0.0是对Swagger规范的重大改进&#xff0c;大部分已于一年前发布&#xff0c;但工具赶上了一段时间。 但是&#xff0c;随着最近Swagger Core 2.0.0的正式发布&#xff0c;事情肯定会加速…

display和show的区别

一、词义不同 1、display &#xff1a;展览&#xff0c;陈列&#xff1b;陈列品&#xff0c;展览品&#xff1b;显示器&#xff1b;炫耀。 例句&#xff1a;It was an incredibledisplayof motherly love and forgiveness. 那是慈母般关爱与宽容的了不起的表现。 2、show&am…

人类一败涂地邀请好友一直显示连接服务器,人类一败涂地怎么邀请好友 局域网创建房间方法图文教学-游侠网...

人类一败涂地怎么邀请好友?想要邀请好友&#xff0c;就要先创建房间&#xff0c;有些玩家不知道具体的操作&#xff0c;这里给大家带来了“主播北北”提供的人类一败涂地局域网创建房间方法图文教学&#xff0c;一起学习下吧。局域网创建房间方法图文教学按照下列步骤操作操作…

将json绑定为对象_了解自定义对象创建:JSON绑定概述系列

将json绑定为对象让我们看一下JSON绑定如何处理自定义对象的创建。 本系列的下一篇文章将介绍如何使用适配器自定义JSON-B。 JSON-B期望所有类都有一个公共的无参数构造函数 &#xff0c;在反序列化过程中使用它来实例化目标类。 创建实例后&#xff0c;可通过调用适当的sett…

什么是迭代

迭代是重复反馈过程的活动&#xff0c;其目的通常是为了逼近所需目标或结果。每一次对过程的重复称为一次“迭代”&#xff0c;而每一次迭代得到的结果会作为下一次迭代的初始值。 重复执行一系列运算步骤&#xff0c;从前面的量依次求出后面的量的过程。此过程的每一次结果&a…

sum服务器操作系统,SUM服务器监控软件

SUM服务器监控软件是服务器监控软件中最为流行的一种企业级监控软件系统&#xff0c;它具有功能强大、监控计数器齐全、完全可配置可管理、集中的监控软件、良好的可扩展性。它除了为企业单位提供IT系统(服务器、网络设备等)的基础监控外&#xff0c;还为企业提供运行在这些基础…