java - 玩!使用 LDAP 的框架身份验证

标签 java playframework ldap playframework-2.3 play-authenticate

我正在为 Java 编写一个带有 Play2 的 web 应用程序,并希望使用 LDAP 进行用户身份验证...我是 LDAP 的新手,实际上并不知道它是如何工作的以及如何在 Play 中使用它...

现在我找到了this plugin这应该可以解决问题,但我找不到任何使用 LDAP 身份验证的示例。你知道任何可以帮助我迈出第一步的教程吗?

我也看到了这篇看起来不错的博客文章,但没有使用 play 身份验证插件,所以它可能不那么灵活? http://www.philipp.haussleiter.de/2013/07/adding-ldap-authentication-to-a-play-2-application/

最佳答案

我有一个使用 LDAP 和 play 框架对用户进行身份验证的示例。这是代码希望这会有所帮助

public class ActiveDirectoryServices {

  public static final String ldapURL = Play.application().configuration().getString("ActiveDirectory.url");
  public static final String domainName =   Play.application().configuration().getString("ActoveDirectory.DomainName");
  public static final int timeout =         Play.application().configuration().getInt("ActoveDirectory.timeout");

  public static Promise<Boolean> authenticate(String username, String password) throws AuthenticationException, CommunicationException, NamingException{

     Hashtable<String, String> env = new Hashtable<String,String>();     

     env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
     env.put("com.sun.jndi.ldap.connect.timeout", ""+(timeout*1000));
     env.put(Context.PROVIDER_URL, ldapURL);
     env.put(Context.SECURITY_AUTHENTICATION, "simple");
     env.put(Context.SECURITY_PRINCIPAL, username+domainName);
     env.put(Context.SECURITY_CREDENTIALS, password);

     DirContext authContext = null; 
     authContext = new InitialDirContext(env);        
     return Promise.pure(Boolean.TRUE);                         
   }

}

然后在 Controller 中我使用上面的代码如下:

try {

    Promise<Boolean> promiseActiveDirectoryCheck = ActiveDirectoryServices.authenticate(userName, password);
      return promiseActiveDirectoryCheck.flatMap(response -> {

      if(response){                           
        return Promise.pure(ok("access granted"));
      }


  });

}catch (AuthenticationException exp) {
  return Promise.pure(ok("access denied"));

}catch (CommunicationException exp) {
  return Promise.pure(ok("The active directory server is not reachable"));

}catch (NamingException exp) {
  return Promise.pure(ok("active directory domain name does not exist"));

}

关于java - 玩!使用 LDAP 的框架身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28566920/

相关文章:

java - Spring:如何为特定类型替换Spring的默认集合注入(inject)策略

java - Spring LDAP 安全性不断重置

mysql - Symfony 3 中带有 Guard 身份验证系统的 LDAP

java - LDAP jndi 连接(java + jboss eap 6)

playframework - Eager fetch 好像没有加入

java - Netbeans 中可以播放声音,但 jar 中不能播放声音

java - 确定图的顶点的函数

Java 企业应用程序在使用 Sun JDK 1.6 的 Linux PC 上启动非常慢

java - Play Framework : Best practice for validation errors redirect

java - scala play 框架中的自定义消息属性,用于删除硬编码字符串