diff --git a/benchmark/pom.xml b/benchmark/pom.xml
index bcdf0e1..77630d5 100644
--- a/benchmark/pom.xml
+++ b/benchmark/pom.xml
@@ -31,7 +31,7 @@
 
   <properties>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-    <jmh.version>1.19</jmh.version>
+    <jmh.version>1.21</jmh.version>
     <javac.target>1.7</javac.target>
     <uberjar.name>benchmarks</uberjar.name>
   </properties>
diff --git a/has-project/has-server-plugin/src/main/java/org/apache/kerby/has/plugins/server/ldap/LDAPServerPlugin.java b/has-project/has-server-plugin/src/main/java/org/apache/kerby/has/plugins/server/ldap/LDAPServerPlugin.java
index 1502920..513e21d 100755
--- a/has-project/has-server-plugin/src/main/java/org/apache/kerby/has/plugins/server/ldap/LDAPServerPlugin.java
+++ b/has-project/has-server-plugin/src/main/java/org/apache/kerby/has/plugins/server/ldap/LDAPServerPlugin.java
@@ -17,6 +17,7 @@
  */
 package org.apache.kerby.has.plugins.server.ldap;
 
+import org.apache.directory.api.ldap.model.exception.LdapInvalidAttributeValueException;
 import org.apache.kerby.has.common.HasException;
 import org.apache.kerby.has.server.AbstractHasServerPlugin;
 import org.apache.kerby.has.server.HasAuthenException;
@@ -60,7 +61,7 @@
             } else {
                 throw new HasAuthenException("LDAP user auth failed");
             }
-        } catch (HasException | IOException e) {
+        } catch (HasException | IOException | LdapInvalidAttributeValueException e) {
             throw new HasAuthenException("LDAP user auth failed. " + e.getMessage());
         }
     }
diff --git a/has-project/has-server-plugin/src/main/java/org/apache/kerby/has/plugins/server/ldap/LDAPUtils.java b/has-project/has-server-plugin/src/main/java/org/apache/kerby/has/plugins/server/ldap/LDAPUtils.java
index 9a703eb..d0bdcd4 100644
--- a/has-project/has-server-plugin/src/main/java/org/apache/kerby/has/plugins/server/ldap/LDAPUtils.java
+++ b/has-project/has-server-plugin/src/main/java/org/apache/kerby/has/plugins/server/ldap/LDAPUtils.java
@@ -45,7 +45,8 @@
         }
     }
 
-    public static boolean doUserAuth(String user, String pwd) throws HasException, IOException {
+    public static boolean doUserAuth(String user, String pwd)
+        throws HasException, IOException, LdapInvalidAttributeValueException {
         LdapNetworkConnection connection = new LdapNetworkConnection(
             ldapServerConf.getHost(), Integer.parseInt(ldapServerConf.getPort()));
         try {
diff --git a/kerby-backend/ldap-backend/src/main/java/org/apache/kerby/kerberos/kdc/identitybackend/LdapIdentityBackend.java b/kerby-backend/ldap-backend/src/main/java/org/apache/kerby/kerberos/kdc/identitybackend/LdapIdentityBackend.java
index d5b090b..6e5ad95 100644
--- a/kerby-backend/ldap-backend/src/main/java/org/apache/kerby/kerberos/kdc/identitybackend/LdapIdentityBackend.java
+++ b/kerby-backend/ldap-backend/src/main/java/org/apache/kerby/kerberos/kdc/identitybackend/LdapIdentityBackend.java
@@ -24,6 +24,7 @@
 import org.apache.directory.api.ldap.model.entry.DefaultEntry;
 import org.apache.directory.api.ldap.model.entry.Entry;
 import org.apache.directory.api.ldap.model.exception.LdapException;
+import org.apache.directory.api.ldap.model.exception.LdapInvalidAttributeValueException;
 import org.apache.directory.api.ldap.model.exception.LdapInvalidDnException;
 import org.apache.directory.api.ldap.model.message.ModifyRequest;
 import org.apache.directory.api.ldap.model.message.ModifyRequestImpl;
@@ -311,8 +312,9 @@
      * @param principalName The principal name to be convert.
      * @return
      * @throws org.apache.directory.api.ldap.model.exception.LdapInvalidDnException if a remote exception occurs.
+     * @throws LdapInvalidAttributeValueException 
      */
-    private Dn toDn(String principalName) throws LdapInvalidDnException {
+    private Dn toDn(String principalName) throws LdapInvalidDnException, LdapInvalidAttributeValueException {
         String[] names = principalName.split("@");
         String uid = names[0];
         Dn dn = new Dn(new Rdn("uid", uid), new Dn(getConfig().getString("base_dn")));
diff --git a/kerby-backend/ldap-backend/src/main/java/org/apache/kerby/kerberos/kdc/identitybackend/LdapIdentityGetHelper.java b/kerby-backend/ldap-backend/src/main/java/org/apache/kerby/kerberos/kdc/identitybackend/LdapIdentityGetHelper.java
index bc070dc..eb8807f 100644
--- a/kerby-backend/ldap-backend/src/main/java/org/apache/kerby/kerberos/kdc/identitybackend/LdapIdentityGetHelper.java
+++ b/kerby-backend/ldap-backend/src/main/java/org/apache/kerby/kerberos/kdc/identitybackend/LdapIdentityGetHelper.java
@@ -68,7 +68,7 @@
      * @return keys
      */
     public List<EncryptionKey> getKeys() throws IOException {
-        Iterator<Value<?>> iterator1 = entry.get(KerberosAttribute.KRB5_KEY_AT).iterator();
+        Iterator<Value> iterator1 = entry.get(KerberosAttribute.KRB5_KEY_AT).iterator();
         List<EncryptionKey> keys = new ArrayList<>();
         while (iterator1.hasNext()) {
             byte[] encryKey = iterator1.next().getBytes();
diff --git a/pom.xml b/pom.xml
index 65cffb3..db3e5bd 100644
--- a/pom.xml
+++ b/pom.xml
@@ -47,10 +47,10 @@
   </distributionManagement>
 
   <properties>
-    <apacheds.version>2.0.0-M24</apacheds.version>
+    <apacheds.version>2.0.0.AM25</apacheds.version>
     <commons-io.version>2.6</commons-io.version>
     <gson.version>2.6.2</gson.version>
-    <ldap.api.version>1.0.1</ldap.api.version>
+    <ldap.api.version>2.0.0.AM1</ldap.api.version>
     <log4j.version>1.2.17</log4j.version>
     <junit.version>4.12</junit.version>
     <nimbus.jose.version>4.41.2</nimbus.jose.version>
@@ -72,7 +72,7 @@
     <commons-dbutils.version>1.6</commons-dbutils.version>
     <drizzle-jdbc.version>1.4</drizzle-jdbc.version>
     <jsch.version>0.1.54</jsch.version>
-    <maven-owasp-plugin-version>3.3.1</maven-owasp-plugin-version>
+    <maven-owasp-plugin-version>4.0.1</maven-owasp-plugin-version>
     <commons-codec.version>1.4</commons-codec.version>
     <commons-logging.version>1.2</commons-logging.version>
     <ini4j.version>0.5.4</ini4j.version>
