当前位置: 首页 > 知识库问答 >
问题:

Spring LDAP-在独立java程序中创建LdapTemplate-使用Spring LDAP作为CDI资源

姜煌
2023-03-14

我正在尝试使用spring数据构建一个LdapTemplate对象。

 public class LDAPTemplate {

        public static void main(String[] args) {
            LdapContextSource lcs = new LdapContextSource();
            lcs.setUrl("ldap://localhost:389/");
            lcs.setUserDn("cn=Manager, dc=example, dc=com");
            lcs.setPassword("secret1");
            lcs.setDirObjectFactory(DefaultDirObjectFactory.class);
            LdapTemplate ldap = new LdapTemplate(lcs);
            ldap.lookup("cn=aaa");

        }

    }

我想知道的是实例化ldap模板对象的正确方法。因为当我执行查找时,它会抛出NPE。

我试图在CDI上下文中使用LDAP Spring而根本不使用Spring。如果您有指针,那就太好了。Spring LDAP是否依赖于Spring?

共有3个答案

贡光明
2023-03-14

解决方案:在CDI上下文中使用Spring LDAP,而不使用Spring IoC

>

  • 为LDAP模板创建资源生成器。

    public class Resources {
    private LdapTemplate template;
    
    @Produces
    //It is a custom qualifier
    @CustomeLDAPTemplate
    public LdapTemplate getTemplate() {
        LdapContextSource lcs = new LdapContextSource();
        lcs.setUrl("ldap://localhost:389/");
        lcs.setUserDn("cn=Manager, dc=example, dc=com");
        lcs.setPassword("secret1");
        lcs.setDirObjectFactory(DefaultDirObjectFactory.class);
        lcs.afterPropertiesSet();
        template = new LdapTemplate(lcs);
        return template;
    }
    
    public void setTemplate(LdapTemplate template) {
        this.template = template;
     }
    }
    

    创建一个自定义限定符-表示我想要LdapTemplate和CustomeLDAPTemplate类型的tempate对象

    @Qualifier  
    @Retention(RUNTIME)  
    @Target({TYPE,CONSTRUCTOR, METHOD, FIELD})  
    public @interface CustomeLDAPTemplate {}  
    

    上的实现—我使用JAX-WS类进行验证。

    @Path("/users")
    @RequestScoped
    public class UserResource {
    
        @Inject
        @CustomeLDAPTemplate
        private LdapTemplate template;
    
        @POST
        @Consumes(MediaType.APPLICATION_XML)
        public Response createUser(InputStream is){
            User user = readStream(is);
            System.out.println("LDAP Look up " + template.lookup("cn=aaa,ou=Org1, dc=example, dc=com").toString());
            uRepo.save(user);
            return Response.created(URI.create("/users/" + user.getUser_id())).build();
        }   
    }
    

  • 申屠英韶
    2023-03-14

    正确的代码

    public class LDAPTemplate {
        public static void main(String[] args) {
            LdapContextSource lcs = new LdapContextSource();
            lcs.setUrl("ldap://localhost:389/");
            lcs.setUserDn("cn=Manager, dc=example, dc=com");
            lcs.setPassword("secret1");
            lcs.setDirObjectFactory(DefaultDirObjectFactory.class);
            lcs.afterPropertiesSet();
            LdapTemplate ldap = new LdapTemplate(lcs);
            ldap.lookup("cn=aaa");
    
        }
    }
    
    温智明
    2023-03-14

    LdapContextSource是初始化bean,因此需要调用afterPropertiesSet。。。

    和JavaDoc:

    当在Spring上下文之外使用此类的实现时,有必要在设置所有属性时调用AfterPropertieSet(),以便完成初始化。

     类似资料:
    • 我正在尝试使用spring连接到LDAP服务器 有关LDAP服务器的可用信息如下: 主机/ip 端口 域名 这是我的密码 然后在另一个类中是身份验证方法 我有以下错误: m. m. a. ExceptionHandlerExceptionResolver:已解决的[org.springframework.ldap.未分类的LdapExctive:在LDAP处理过程中发生了未分类的异常;嵌套的异常j

    • 我有教育问题: 存在具有windows server 2003(AD)的虚拟机,其中包含用户及其密码。已建立与机器的连接(ip:192.168.56.101:389)。 Web应用程序的目的是使用户能够在AD中更改他的密码。 问题:无法配置到windws server 2003的连接。 我从这个教程开始https://spring.io/guides/gs/authenticating-ldap/

    • 问题内容: 如何使用Maven创建桌面(独立/ Swing)应用程序? 我正在使用Eclipse 3.6。 问题答案: 创建一个Maven项目,如下所示: 将以下条目添加到您的pom文件中: 将项目作为Maven项目导入到Eclipse,然后作为Java应用程序运行。

    • 我正在试图弄清楚如何构建一个Spring Boot独立应用程序。当然,要让东西自动连线需要一些初始的上下文起点。如果我只是尝试自动生成一个类来运行一个作业,那么即使我将它设置为静态,它也是空的。 有没有办法在一个独立的非Web应用程序中使用Spring@Services? 因此,首先将静态JobRunnerService连接到运行MyApplication的主程序,JobRunner(Servic