Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javaee6中的JAAS配置和LDAP登录模块_Java_Ldap_Glassfish 3_Java Ee 6_Jaas - Fatal编程技术网

javaee6中的JAAS配置和LDAP登录模块

javaee6中的JAAS配置和LDAP登录模块,java,ldap,glassfish-3,java-ee-6,jaas,Java,Ldap,Glassfish 3,Java Ee 6,Jaas,我在这里写一个问题,因为我已经几个月没能自己找到解决方案了。我的情况:我有一个用java编写的客户机-服务器应用程序,它使用Java2EE6和EJB3.0。服务器端部署在glassfish 3.0上。我需要开发/实现应用程序的登录模块。身份验证必须使用ldap服务器完成,授权将在应用程序内部处理。因此,我想雇佣JAAS技术来混合身份验证和授权。比如说,我就是这样做的。然后我跟随并执行登录。我的问题是ldap登录不起作用 我的代码: LoginContext lc = null;

我在这里写一个问题,因为我已经几个月没能自己找到解决方案了。我的情况:我有一个用java编写的客户机-服务器应用程序,它使用Java2EE6和EJB3.0。服务器端部署在glassfish 3.0上。我需要开发/实现应用程序的登录模块。身份验证必须使用ldap服务器完成,授权将在应用程序内部处理。因此,我想雇佣JAAS技术来混合身份验证和授权。比如说,我就是这样做的。然后我跟随并执行登录。我的问题是ldap登录不起作用

我的代码:

    LoginContext lc = null;

    try {
        CallbackHandler handler = new CallbackHandler() {
            public void handle(Callback[] callbacks) throws UnsupportedCallbackException {
                for( int i = 0; i < callbacks.length; i++ ) {
                    if( callbacks[i] instanceof NameCallback ) {
                        // prompt the user for a username
                          NameCallback nc = (NameCallback)callbacks[i];
                          nc.setName("admin");
                          System.out.println("Login done.");
                    } else if( callbacks[i] instanceof PasswordCallback ) {
                        // prompt the user for sensitive information
                          PasswordCallback pc = (PasswordCallback)callbacks[i];
                          pc.setPassword("mypassword".toCharArray());
                          System.out.println("Password done.");
                    } else {
                        throw new UnsupportedCallbackException(callbacks[i], "Unrecognized Callback");
                    } //end if/else
                } //end for()
            }
        };

        lc = new LoginContext("myAuth", handler);
        lc.login();
        Subject subject = lc.getSubject();
    } catch (LoginException e) {
        e.printStackTrace();
    }
应用程序的客户端部分使用以下jvm选项运行:

-Djava.security.auth.login.config=./jaas.conf  -Dorg.omg.CORBA.ORBInitialHost=localhost
在glassfish站点上,我设置了jvm属性

-Djava.security.auth.login.config=${com.sun.aas.instanceRoot}/config/login.conf
-Djava.naming.referral=follow
glassfish端的login.conf文件包含以下行(adrelm是我的glassfish的默认域)

ADRealm的设置:

      <property name="jaas-context" value="ldapRealm" />
      <property name="base-dn" value="CN=users,DC=my,DC=domain,DC=com" />
      <property name="directory" value="ldap://mydomain:3268" />
      <property name="search-bind-password" value="mypassword" />
      <property name="search-bind-dn" value="admin@my.domain.com" />
奇怪的是,只工作了一次(!),即我可以从
lc.getSubject()
方法中获得
subject
。我还假设上面的
handle()
方法没有被调用,因为我没有看到

Login done.
Password done.
在输出中


有谁能帮我一下吗?

1st-在LDAP上,您不使用管理员用户,而是创建另一个用户,如果需要,使用必要的条件进行搜索和/或绑定。管理员用户不安全,不推荐使用,尤其是在JavaEE环境中

第二-您尝试连接到哪种LDAP服务器?OpenLDAP还是Exchange服务器

我指的是您在等待您的回复时参考以下链接:


仔细了解JAAS身份验证。请参见此处::“authIdentity=auth\u id此选项指定在向LDAP目录验证用户时要使用的标识……请注意,如果此选项不包含可分辨名称,则还必须指定userFilter选项。”您是否尝试添加userFilter选项?谢谢您的回复@Giorgio!关于你的第二个问题,我正在使用Active Directory,它是Win server 2003 R2的一部分。我已经阅读了该文档,但我将再次仔细阅读。顺便说一下,我拒绝了使用JAAS工具的想法,因为我没有太多时间。相反,我在服务器端使用了
InitialLdapContext
。您好,谢谢您提供的信息。使用Active Directory W2003 R2,创建由“SchemaAdmin”组关联的用户。
      <property name="jaas-context" value="ldapRealm" />
      <property name="base-dn" value="CN=users,DC=my,DC=domain,DC=com" />
      <property name="directory" value="ldap://mydomain:3268" />
      <property name="search-bind-password" value="mypassword" />
      <property name="search-bind-dn" value="admin@my.domain.com" />
Mar 1, 2013 1:36:44 PM com.sun.appserv.security.AppservPasswordLoginModule extractCredentials
SEVERE: passwordlm.nopwdcred
javax.security.auth.login.LoginException: No credentials.
Login done.
Password done.