当前位置: 首页 > 面试题库 >

如何使用给定的LdapContext在ldap whith java中检查用户密码?

唐恺
2023-03-14
问题内容

我确实有一个Web应用程序,用户必须在其中登录。密码存储在LDAP服务器中。有关LDAP服务器的所有信息都作为外部jndi资源存储在应用程序服务器(glassfish)中。因此,我的应用程序对LDAP服务器一无所知,只得到了如下LdapContext:

@Resource(name = "ldap/users")
private LdapContext ctx;

在这种情况下,很容易更改或读取为用户存储的信息,但是我如何检查他们的密码?通常我只是做一个新的连接来检查用户密码。像这样:

Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://localhost:389/o=JNDITutorial");

env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "cn=S. User, ou=NewHires, o=JNDITutorial");
env.put(Context.SECURITY_CREDENTIALS, "mysecret");

DirContext ctx = new InitialDirContext(env);

但是由于我不知道这个参数,所以我不能这样做。那么,如何使用LdapContext检查用户密码是否正确?密码以加密方式存储(ssha),因此我不能仅比较属性。

谢谢拉斐尔


问题答案:

您应该能够从ldap上下文中获取环境,对其进行克隆,然后将要检查的用户的主体和凭据放入:

@Resource(name = "ldap/users")
private LdapContext ldapContext;

Hashtable environment = ldapContext.getEnvironment().clone();
environment.put(Context.SECURITY_PRINCIPAL, userDN);
environment.put(Context.SECURITY_CREDENTIALS, userPassword);

DirContext dirContext = new InitialDirContext(environment);


 类似资料:
  • 对于一些要求,我需要从登录页面的用户给定的用户名和密码。( 但是,我无法设法进入以下SecurityConfig的配置方法。 @EnableWebSecurity公共类SecurityConfig扩展WebSecurity配置适配器{

  • 我正在开发一个Laravel ACL系统。我的基本表是,透视表是。 我想使用我的自定义中间件检查用户权限。我试过这种方法,但效果不好。每个用户都可以访问所有具有或不具有的权限。 现在,我该如何解决这个问题。请看我的代码示例。 我的控制器。 我的中间件。 还有,我的模型方法。

  • 我刚刚开始和AWS一起工作,学习AWS。我正在使用AWS移动中心的服务,到目前为止已经设置了登录 一切正常,现在我正在处理忘记密码和更新密码。 问题是,AWS设置忘记密码的方式是: 首先输入用户名,然后在用户输入用户名后,AWS通过SMS向与该用户名关联的电话号码发送验证码。 这是一个问题,因为这意味着任何人都可以输入任何用户名,并会发送一条短信,导致我的短信付款增加,老实说,这看起来很草率。 我

  • 我正在尝试从Twitter检索数据,使用Tweepy作为在命令行中键入的用户名。我想提取相当多关于状态和用户的数据,所以想出了以下内容: 请注意,我正在导入所有必需的模块,并且具有oauth键(只是此处未包含)并且文件名正确,刚刚更改: 我希望最终遍历用户的所有推文(最多3200条限制)。不过,首先要做的是。到目前为止,尽管我有两个问题,但我收到了以下关于转发的错误消息: 将用户名作为变量传递似乎

  • 我想显示错误的用户名 问题是它会对每一行执行if fe语句,直到它到达显示“用户名和密码正确”的右侧行b4,但我希望它检查所有内容,如果它不存在,则显示“请检查用户名和密码” 注意:请忽略命名约定,问题出在安排的同时,如果和任何其他推荐的循环语句,但我不确定如何组织它以获得我想要的结果 这是我的代码与注释

  • 问题内容: 我正在使用任何具有唯一性的应用程序,每当最终用户输入他的应用程序时,我都会通过Ajax发出SQL查询,以检查是否存在该查询。在此之前,它工作正常,但现在我知道那是什么时候存在,那么我想在JSP页面上显示该ID已被使用,反之亦然。 所以我的问题是如何从struts应用程序获取响应并将其提供给Ajax或JSP页面,以及在“ struts.xml”结果标签中写入什么? 这是我的Ajax呼叫: