You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2017/08/23 08:54:47 UTC

syncope git commit: [SYNCOPE-938] Replacing commons-codec features with standard JDK counterparts

Repository: syncope
Updated Branches:
  refs/heads/master 48b200244 -> 8776551b7


[SYNCOPE-938] Replacing commons-codec features with standard JDK counterparts


Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/8776551b
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/8776551b
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/8776551b

Branch: refs/heads/master
Commit: 8776551b7041ffd06aa9d2dbc3b577b386fb1dc4
Parents: 48b2002
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Wed Aug 23 10:54:38 2017 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Wed Aug 23 10:54:38 2017 +0200

----------------------------------------------------------------------
 .../client/enduser/resources/InfoResource.java  |  4 +--
 .../client/enduser/util/SaltGenerator.java      | 15 ++++++--
 client/lib/pom.xml                              |  5 ---
 core/persistence-jpa/pom.xml                    |  4 ---
 .../jpa/content/ContentLoaderHandler.java       | 11 +++---
 .../jpa/content/XMLContentExporter.java         |  6 ++--
 .../jpa/entity/AbstractPlainAttrValue.java      | 24 ++++++-------
 .../persistence/jpa/inner/PlainAttrTest.java    |  4 +--
 .../serialization/AttributeDeserializer.java    |  8 ++---
 .../api/serialization/AttributeSerializer.java  |  7 ++--
 .../GuardedStringDeserializer.java              |  4 +--
 .../serialization/GuardedStringSerializer.java  |  4 +--
 .../serialization/SyncTokenDeserializer.java    | 20 +++++------
 .../api/serialization/SyncTokenSerializer.java  |  4 +--
 .../LDAPPasswordPropagationActions.java         |  8 ++---
 .../java/pushpull/LDAPPasswordPullActions.java  |  9 +++--
 .../syncope/core/spring/security/Encryptor.java |  6 ++--
 .../java/AbstractUserWorkflowAdapter.java       | 11 +++---
 .../java/data/SAML2IdPDataBinderImpl.java       | 15 ++++----
 .../apache/syncope/fit/core/SAML2ITCase.java    | 12 ++++---
 .../syncope/fit/core/UserIssuesITCase.java      | 36 +++++++++++---------
 installer/pom.xml                               |  4 ---
 .../installer/utilities/PasswordGenerator.java  |  4 +--
 installer/src/main/resources/izpack/install.xml |  1 -
 pom.xml                                         |  6 ----
 25 files changed, 114 insertions(+), 118 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/8776551b/client/enduser/src/main/java/org/apache/syncope/client/enduser/resources/InfoResource.java
----------------------------------------------------------------------
diff --git a/client/enduser/src/main/java/org/apache/syncope/client/enduser/resources/InfoResource.java b/client/enduser/src/main/java/org/apache/syncope/client/enduser/resources/InfoResource.java
index 23af8fc..24b90a0 100644
--- a/client/enduser/src/main/java/org/apache/syncope/client/enduser/resources/InfoResource.java
+++ b/client/enduser/src/main/java/org/apache/syncope/client/enduser/resources/InfoResource.java
@@ -53,8 +53,8 @@ public class InfoResource extends BaseResource {
                             sessionCookieUtils.getCookie(SyncopeEnduserConstants.XSRF_COOKIE).getValue()))) {
                 LOG.debug("Set XSRF-TOKEN cookie");
                 SyncopeEnduserSession.get().setXsrfTokenGenerated(true);
-                sessionCookieUtils.save(SyncopeEnduserConstants.XSRF_COOKIE, SaltGenerator.generate(
-                        SyncopeEnduserSession.get().getId()));
+                sessionCookieUtils.save(SyncopeEnduserConstants.XSRF_COOKIE,
+                        SaltGenerator.generate(SyncopeEnduserSession.get().getId()));
             }
             response.setTextEncoding(StandardCharsets.UTF_8.name());
             response.setWriteCallback(new WriteCallback() {

http://git-wip-us.apache.org/repos/asf/syncope/blob/8776551b/client/enduser/src/main/java/org/apache/syncope/client/enduser/util/SaltGenerator.java
----------------------------------------------------------------------
diff --git a/client/enduser/src/main/java/org/apache/syncope/client/enduser/util/SaltGenerator.java b/client/enduser/src/main/java/org/apache/syncope/client/enduser/util/SaltGenerator.java
index 19896b4..d1ab28e 100644
--- a/client/enduser/src/main/java/org/apache/syncope/client/enduser/util/SaltGenerator.java
+++ b/client/enduser/src/main/java/org/apache/syncope/client/enduser/util/SaltGenerator.java
@@ -18,9 +18,11 @@
  */
 package org.apache.syncope.client.enduser.util;
 
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
 import java.security.SecureRandom;
+import javax.xml.bind.DatatypeConverter;
 import org.apache.wicket.util.crypt.Base64;
-import org.apache.commons.codec.digest.DigestUtils;
 
 public final class SaltGenerator {
 
@@ -29,8 +31,15 @@ public final class SaltGenerator {
         byte[] salt = new byte[16];
         // fill array with random bytes
         new SecureRandom().nextBytes(salt);
-        // create digest with MD5
-        return DigestUtils.md2Hex(input + Base64.encodeBase64String(salt));
+        // create digest with MD2
+        MessageDigest md;
+        try {
+            md = MessageDigest.getInstance("MD2");
+            return DatatypeConverter.printHexBinary(
+                    md.digest((input + Base64.encodeBase64String(salt)).getBytes()));
+        } catch (final NoSuchAlgorithmException e) {
+            throw new IllegalArgumentException(e);
+        }
     }
 
     private SaltGenerator() {

http://git-wip-us.apache.org/repos/asf/syncope/blob/8776551b/client/lib/pom.xml
----------------------------------------------------------------------
diff --git a/client/lib/pom.xml b/client/lib/pom.xml
index f682e45..ce70fc4 100644
--- a/client/lib/pom.xml
+++ b/client/lib/pom.xml
@@ -60,11 +60,6 @@ under the License.
       <groupId>com.fasterxml.jackson.jaxrs</groupId>
       <artifactId>jackson-jaxrs-json-provider</artifactId>
     </dependency>  
-    
-    <dependency>
-      <groupId>commons-codec</groupId>
-      <artifactId>commons-codec</artifactId>
-    </dependency>
  
     <dependency>
       <groupId>joda-time</groupId>

http://git-wip-us.apache.org/repos/asf/syncope/blob/8776551b/core/persistence-jpa/pom.xml
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/pom.xml b/core/persistence-jpa/pom.xml
index 9b2a5e4..b99e77c 100644
--- a/core/persistence-jpa/pom.xml
+++ b/core/persistence-jpa/pom.xml
@@ -89,10 +89,6 @@ under the License.
     </dependency>
 
     <dependency>
-      <groupId>commons-codec</groupId>
-      <artifactId>commons-codec</artifactId>
-    </dependency>
-    <dependency>
       <groupId>org.apache.commons</groupId>
       <artifactId>commons-jexl3</artifactId>
     </dependency>

http://git-wip-us.apache.org/repos/asf/syncope/blob/8776551b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/content/ContentLoaderHandler.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/content/ContentLoaderHandler.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/content/ContentLoaderHandler.java
index 0786351..72f5967 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/content/ContentLoaderHandler.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/content/ContentLoaderHandler.java
@@ -24,8 +24,7 @@ import java.text.ParseException;
 import java.util.HashMap;
 import java.util.Map;
 import javax.sql.DataSource;
-import org.apache.commons.codec.DecoderException;
-import org.apache.commons.codec.binary.Hex;
+import javax.xml.bind.DatatypeConverter;
 import org.apache.syncope.core.provisioning.api.utils.FormatUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -138,16 +137,16 @@ public class ContentLoaderHandler extends DefaultHandler {
                 case Types.VARBINARY:
                 case Types.LONGVARBINARY:
                     try {
-                        parameters[i] = Hex.decodeHex(attrs.getValue(i).toCharArray());
-                    } catch (DecoderException | IllegalArgumentException e) {
+                        parameters[i] = DatatypeConverter.parseHexBinary(attrs.getValue(i));
+                    } catch (IllegalArgumentException e) {
                         parameters[i] = attrs.getValue(i);
                     }
                     break;
 
                 case Types.BLOB:
                     try {
-                        parameters[i] = Hex.decodeHex(attrs.getValue(i).toCharArray());
-                    } catch (DecoderException | IllegalArgumentException e) {
+                        parameters[i] = DatatypeConverter.parseHexBinary(attrs.getValue(i));
+                    } catch (IllegalArgumentException e) {
                         LOG.warn("Error decoding hex string to specify a blob parameter", e);
                         parameters[i] = attrs.getValue(i);
                     } catch (Exception e) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/8776551b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/content/XMLContentExporter.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/content/XMLContentExporter.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/content/XMLContentExporter.java
index c2adeea..6ff27ab 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/content/XMLContentExporter.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/content/XMLContentExporter.java
@@ -42,6 +42,7 @@ import java.util.Set;
 import java.util.TreeMap;
 import java.util.TreeSet;
 import javax.sql.DataSource;
+import javax.xml.bind.DatatypeConverter;
 import javax.xml.transform.OutputKeys;
 import javax.xml.transform.Transformer;
 import javax.xml.transform.TransformerConfigurationException;
@@ -69,7 +70,6 @@ import org.apache.syncope.core.persistence.jpa.entity.user.JPAUPlainAttrValue;
 import org.apache.syncope.core.persistence.jpa.entity.user.JPAURelationship;
 import org.apache.syncope.core.persistence.jpa.entity.user.JPAUser;
 import org.springframework.jdbc.datasource.DataSourceUtils;
-import org.springframework.security.crypto.codec.Hex;
 import org.springframework.stereotype.Component;
 import org.xml.sax.SAXException;
 import org.xml.sax.helpers.AttributesImpl;
@@ -181,14 +181,14 @@ public class XMLContentExporter extends AbstractContentDealer implements Content
                 case Types.LONGVARBINARY:
                     final InputStream is = rs.getBinaryStream(columnName);
                     if (is != null) {
-                        res = new String(Hex.encode(IOUtils.toByteArray(is)));
+                        res = DatatypeConverter.printHexBinary(IOUtils.toByteArray(is));
                     }
                     break;
 
                 case Types.BLOB:
                     final Blob blob = rs.getBlob(columnName);
                     if (blob != null) {
-                        res = new String(Hex.encode(IOUtils.toByteArray(blob.getBinaryStream())));
+                        res = DatatypeConverter.printHexBinary(IOUtils.toByteArray(blob.getBinaryStream()));
                     }
                     break;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/8776551b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractPlainAttrValue.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractPlainAttrValue.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractPlainAttrValue.java
index bac48c6..9e32d02 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractPlainAttrValue.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractPlainAttrValue.java
@@ -18,6 +18,7 @@
  */
 package org.apache.syncope.core.persistence.jpa.entity;
 
+import java.util.Base64;
 import java.util.Date;
 import javax.persistence.Basic;
 import javax.persistence.Lob;
@@ -26,7 +27,6 @@ import javax.persistence.Temporal;
 import javax.persistence.TemporalType;
 import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
-import org.apache.commons.codec.binary.Base64;
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
@@ -188,7 +188,7 @@ public abstract class AbstractPlainAttrValue extends AbstractGeneratedKeyEntity
                 break;
 
             case Binary:
-                this.setBinaryValue(Base64.decodeBase64(value));
+                this.setBinaryValue(Base64.getMimeDecoder().decode(value));
                 break;
 
             case String:
@@ -223,8 +223,8 @@ public abstract class AbstractPlainAttrValue extends AbstractGeneratedKeyEntity
     public String getValueAsString() {
         final AttrSchemaType type = getAttr() == null || getAttr().getSchema() == null
                 || getAttr().getSchema().getType() == null
-                        ? AttrSchemaType.String
-                        : getAttr().getSchema().getType();
+                ? AttrSchemaType.String
+                : getAttr().getSchema().getType();
 
         return getValueAsString(type);
     }
@@ -241,27 +241,27 @@ public abstract class AbstractPlainAttrValue extends AbstractGeneratedKeyEntity
             case Long:
                 result = getAttr() == null || getAttr().getSchema() == null
                         || getAttr().getSchema().getConversionPattern() == null
-                                ? getLongValue().toString()
-                                : FormatUtils.format(getLongValue(), getAttr().getSchema().getConversionPattern());
+                        ? getLongValue().toString()
+                        : FormatUtils.format(getLongValue(), getAttr().getSchema().getConversionPattern());
                 break;
 
             case Double:
                 result = getAttr() == null || getAttr().getSchema() == null
                         || getAttr().getSchema().getConversionPattern() == null
-                                ? getDoubleValue().toString()
-                                : FormatUtils.format(getDoubleValue(), getAttr().getSchema().getConversionPattern());
+                        ? getDoubleValue().toString()
+                        : FormatUtils.format(getDoubleValue(), getAttr().getSchema().getConversionPattern());
                 break;
 
             case Date:
                 result = getAttr() == null || getAttr().getSchema() == null
                         || getAttr().getSchema().getConversionPattern() == null
-                                ? FormatUtils.format(getDateValue())
-                                : FormatUtils.format(
-                                        getDateValue(), false, getAttr().getSchema().getConversionPattern());
+                        ? FormatUtils.format(getDateValue())
+                        : FormatUtils.format(
+                                getDateValue(), false, getAttr().getSchema().getConversionPattern());
                 break;
 
             case Binary:
-                result = Base64.encodeBase64String(getBinaryValue());
+                result = new String(Base64.getMimeEncoder().encode(getBinaryValue()));
                 break;
 
             case String:

http://git-wip-us.apache.org/repos/asf/syncope/blob/8776551b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PlainAttrTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PlainAttrTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PlainAttrTest.java
index c80caaf..9b79f44 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PlainAttrTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PlainAttrTest.java
@@ -27,6 +27,7 @@ import static org.junit.Assert.fail;
 import java.io.UnsupportedEncodingException;
 import java.nio.charset.StandardCharsets;
 import java.util.Arrays;
+import java.util.Base64;
 import java.util.Random;
 import javax.validation.ValidationException;
 import org.apache.syncope.common.lib.types.AnyTypeKind;
@@ -43,7 +44,6 @@ import org.apache.syncope.core.spring.security.Encryptor;
 import org.apache.syncope.core.persistence.api.entity.PlainSchema;
 import org.junit.Test;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.crypto.codec.Base64;
 import org.springframework.transaction.annotation.Transactional;
 
 @Transactional("Master")
@@ -207,7 +207,7 @@ public class PlainAttrTest extends AbstractTest {
 
         byte[] bytes = new byte[20];
         new Random().nextBytes(bytes);
-        String photoB64Value = new String(Base64.encode(bytes), StandardCharsets.UTF_8);
+        String photoB64Value = new String(Base64.getMimeEncoder().encode(bytes), StandardCharsets.UTF_8);
 
         UPlainAttr attr = entityFactory.newEntity(UPlainAttr.class);
         attr.setOwner(user);

http://git-wip-us.apache.org/repos/asf/syncope/blob/8776551b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/serialization/AttributeDeserializer.java
----------------------------------------------------------------------
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/serialization/AttributeDeserializer.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/serialization/AttributeDeserializer.java
index 91a5980..a6885d7 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/serialization/AttributeDeserializer.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/serialization/AttributeDeserializer.java
@@ -25,10 +25,9 @@ import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import java.io.IOException;
 import java.util.ArrayList;
-import java.util.Iterator;
+import java.util.Base64;
 import java.util.List;
 import org.apache.commons.lang3.StringUtils;
-import org.identityconnectors.common.Base64;
 import org.identityconnectors.common.security.GuardedString;
 import org.identityconnectors.framework.common.objects.Attribute;
 import org.identityconnectors.framework.common.objects.AttributeBuilder;
@@ -46,8 +45,7 @@ class AttributeDeserializer extends JsonDeserializer<Attribute> {
         String name = tree.get("name").asText();
 
         List<Object> values = new ArrayList<>();
-        for (Iterator<JsonNode> itor = tree.get("value").iterator(); itor.hasNext();) {
-            JsonNode node = itor.next();
+        for (JsonNode node : tree.get("value")) {
             if (node.isNull()) {
                 values.add(null);
             } else if (node.isObject()) {
@@ -65,7 +63,7 @@ class AttributeDeserializer extends JsonDeserializer<Attribute> {
                 if (text.startsWith(AttributeSerializer.BYTE_ARRAY_PREFIX)
                         && text.endsWith(AttributeSerializer.BYTE_ARRAY_SUFFIX)) {
 
-                    values.add(Base64.decode(StringUtils.substringBetween(
+                    values.add(Base64.getMimeDecoder().decode(StringUtils.substringBetween(
                             text, AttributeSerializer.BYTE_ARRAY_PREFIX, AttributeSerializer.BYTE_ARRAY_SUFFIX)));
                 } else {
                     values.add(text);

http://git-wip-us.apache.org/repos/asf/syncope/blob/8776551b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/serialization/AttributeSerializer.java
----------------------------------------------------------------------
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/serialization/AttributeSerializer.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/serialization/AttributeSerializer.java
index f8b0fbf..5ca1b73 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/serialization/AttributeSerializer.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/serialization/AttributeSerializer.java
@@ -22,7 +22,7 @@ import com.fasterxml.jackson.core.JsonGenerator;
 import com.fasterxml.jackson.databind.JsonSerializer;
 import com.fasterxml.jackson.databind.SerializerProvider;
 import java.io.IOException;
-import org.identityconnectors.common.Base64;
+import java.util.Base64;
 import org.identityconnectors.common.security.GuardedString;
 import org.identityconnectors.framework.common.objects.Attribute;
 
@@ -59,7 +59,10 @@ class AttributeSerializer extends JsonSerializer<Attribute> {
                 } else if (value instanceof Boolean) {
                     jgen.writeBoolean((Boolean) value);
                 } else if (value instanceof byte[]) {
-                    jgen.writeString(BYTE_ARRAY_PREFIX + Base64.encode((byte[]) value) + BYTE_ARRAY_SUFFIX);
+                    jgen.writeString(
+                            BYTE_ARRAY_PREFIX
+                            + Base64.getMimeEncoder().encodeToString((byte[]) value)
+                            + BYTE_ARRAY_SUFFIX);
                 } else {
                     jgen.writeString(value.toString());
                 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/8776551b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/serialization/GuardedStringDeserializer.java
----------------------------------------------------------------------
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/serialization/GuardedStringDeserializer.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/serialization/GuardedStringDeserializer.java
index a75319e..c6251b1 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/serialization/GuardedStringDeserializer.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/serialization/GuardedStringDeserializer.java
@@ -24,7 +24,7 @@ import com.fasterxml.jackson.databind.JsonDeserializer;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import java.io.IOException;
 import java.lang.reflect.Field;
-import org.identityconnectors.common.Base64;
+import java.util.Base64;
 import org.identityconnectors.common.security.EncryptorFactory;
 import org.identityconnectors.common.security.GuardedString;
 import org.slf4j.Logger;
@@ -50,7 +50,7 @@ class GuardedStringDeserializer extends JsonDeserializer<GuardedString> {
         }
         byte[] encryptedBytes = null;
         if (tree.has("encryptedBytes")) {
-            encryptedBytes = Base64.decode(tree.get("encryptedBytes").asText());
+            encryptedBytes = Base64.getMimeDecoder().decode(tree.get("encryptedBytes").asText());
         }
         String base64SHA1Hash = null;
         if (tree.has("base64SHA1Hash")) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/8776551b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/serialization/GuardedStringSerializer.java
----------------------------------------------------------------------
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/serialization/GuardedStringSerializer.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/serialization/GuardedStringSerializer.java
index e76416c..d55ca9f 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/serialization/GuardedStringSerializer.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/serialization/GuardedStringSerializer.java
@@ -23,7 +23,7 @@ import com.fasterxml.jackson.databind.JsonSerializer;
 import com.fasterxml.jackson.databind.SerializerProvider;
 import java.io.IOException;
 import java.lang.reflect.Field;
-import org.identityconnectors.common.Base64;
+import java.util.Base64;
 import org.identityconnectors.common.security.EncryptorFactory;
 import org.identityconnectors.common.security.GuardedString;
 import org.identityconnectors.common.security.SecurityUtil;
@@ -62,7 +62,7 @@ class GuardedStringSerializer extends JsonSerializer<GuardedString> {
 
         byte[] encryptedBytes =
                 EncryptorFactory.getInstance().getDefaultEncryptor().encrypt(SecurityUtil.decrypt(source).getBytes());
-        jgen.writeStringField("encryptedBytes", Base64.encode(encryptedBytes));
+        jgen.writeStringField("encryptedBytes", Base64.getMimeEncoder().encodeToString(encryptedBytes));
 
         String base64SHA1Hash = null;
         try {

http://git-wip-us.apache.org/repos/asf/syncope/blob/8776551b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/serialization/SyncTokenDeserializer.java
----------------------------------------------------------------------
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/serialization/SyncTokenDeserializer.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/serialization/SyncTokenDeserializer.java
index 3f8dc4d..e6ee79d 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/serialization/SyncTokenDeserializer.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/serialization/SyncTokenDeserializer.java
@@ -24,7 +24,7 @@ import com.fasterxml.jackson.databind.JsonDeserializer;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import java.io.IOException;
-import org.identityconnectors.common.Base64;
+import java.util.Base64;
 import org.identityconnectors.framework.common.objects.SyncToken;
 
 class SyncTokenDeserializer extends JsonDeserializer<SyncToken> {
@@ -41,19 +41,19 @@ class SyncTokenDeserializer extends JsonDeserializer<SyncToken> {
             value = node.isNull()
                     ? null
                     : node.isBoolean()
-                            ? node.asBoolean()
-                            : node.isDouble()
-                                    ? node.asDouble()
-                                    : node.isLong()
-                                            ? node.asLong()
-                                            : node.isInt()
-                                                    ? node.asInt()
-                                                    : node.asText();
+                    ? node.asBoolean()
+                    : node.isDouble()
+                    ? node.asDouble()
+                    : node.isLong()
+                    ? node.asLong()
+                    : node.isInt()
+                    ? node.asInt()
+                    : node.asText();
 
             if (value instanceof String) {
                 String base64 = (String) value;
                 try {
-                    value = Base64.decode(base64);
+                    value = Base64.getMimeDecoder().decode(base64);
                 } catch (RuntimeException e) {
                     value = base64;
                 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/8776551b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/serialization/SyncTokenSerializer.java
----------------------------------------------------------------------
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/serialization/SyncTokenSerializer.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/serialization/SyncTokenSerializer.java
index f9d2ee5..0644d8f 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/serialization/SyncTokenSerializer.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/serialization/SyncTokenSerializer.java
@@ -22,7 +22,7 @@ import com.fasterxml.jackson.core.JsonGenerator;
 import com.fasterxml.jackson.databind.JsonSerializer;
 import com.fasterxml.jackson.databind.SerializerProvider;
 import java.io.IOException;
-import org.identityconnectors.common.Base64;
+import java.util.Base64;
 import org.identityconnectors.framework.common.objects.SyncToken;
 
 class SyncTokenSerializer extends JsonSerializer<SyncToken> {
@@ -46,7 +46,7 @@ class SyncTokenSerializer extends JsonSerializer<SyncToken> {
         } else if (source.getValue() instanceof Integer) {
             jgen.writeNumber((Integer) source.getValue());
         } else if (source.getValue() instanceof byte[]) {
-            jgen.writeString(Base64.encode((byte[]) source.getValue()));
+            jgen.writeString(Base64.getMimeEncoder().encodeToString((byte[]) source.getValue()));
         } else {
             jgen.writeString(source.getValue().toString());
         }

http://git-wip-us.apache.org/repos/asf/syncope/blob/8776551b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/LDAPPasswordPropagationActions.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/LDAPPasswordPropagationActions.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/LDAPPasswordPropagationActions.java
index ea4f37d..275b84d 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/LDAPPasswordPropagationActions.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/LDAPPasswordPropagationActions.java
@@ -18,9 +18,11 @@
  */
 package org.apache.syncope.core.provisioning.java.propagation;
 
+import java.util.Base64;
 import java.util.HashSet;
 import java.util.Optional;
 import java.util.Set;
+import javax.xml.bind.DatatypeConverter;
 import org.apache.syncope.common.lib.types.AnyTypeKind;
 import org.apache.syncope.common.lib.types.CipherAlgorithm;
 import org.apache.syncope.common.lib.types.ConnConfProperty;
@@ -37,8 +39,6 @@ import org.identityconnectors.framework.common.objects.AttributeUtil;
 import org.identityconnectors.framework.common.objects.ConnectorObject;
 import org.identityconnectors.framework.common.objects.OperationalAttributes;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.crypto.codec.Base64;
-import org.springframework.security.crypto.codec.Hex;
 import org.springframework.transaction.annotation.Transactional;
 
 /**
@@ -71,8 +71,8 @@ public class LDAPPasswordPropagationActions implements PropagationActions {
                         && cipherAlgorithmMatches(getCipherAlgorithm(connInstance), user.getCipherAlgorithm())) {
 
                     String password = user.getPassword().toLowerCase();
-                    byte[] decodedPassword = Hex.decode(password);
-                    byte[] base64EncodedPassword = Base64.encode(decodedPassword);
+                    byte[] decodedPassword = DatatypeConverter.parseHexBinary(password);
+                    byte[] base64EncodedPassword = Base64.getMimeEncoder().encode(decodedPassword);
 
                     String cipherPlusPassword =
                             ("{" + cipherAlgorithm.toLowerCase() + "}" + new String(base64EncodedPassword));

http://git-wip-us.apache.org/repos/asf/syncope/blob/8776551b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/LDAPPasswordPullActions.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/LDAPPasswordPullActions.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/LDAPPasswordPullActions.java
index 8a9f1da..ac3ddfa 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/LDAPPasswordPullActions.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/LDAPPasswordPullActions.java
@@ -18,6 +18,8 @@
  */
 package org.apache.syncope.core.provisioning.java.pushpull;
 
+import java.util.Base64;
+import javax.xml.bind.DatatypeConverter;
 import org.apache.syncope.common.lib.patch.AnyPatch;
 import org.apache.syncope.common.lib.patch.PasswordPatch;
 import org.apache.syncope.common.lib.patch.UserPatch;
@@ -34,8 +36,6 @@ import org.quartz.JobExecutionException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.crypto.codec.Base64;
-import org.springframework.security.crypto.codec.Hex;
 import org.springframework.transaction.annotation.Transactional;
 
 /**
@@ -112,9 +112,8 @@ public class LDAPPasswordPullActions implements PullActions {
         if (entity instanceof UserTO && encodedPassword != null && cipher != null) {
             User user = userDAO.find(entity.getKey());
             if (user != null) {
-                byte[] encodedPasswordBytes = Base64.decode(encodedPassword.getBytes());
-                char[] encodedHex = Hex.encode(encodedPasswordBytes);
-                String encodedHexStr = new String(encodedHex).toUpperCase();
+                byte[] encodedPasswordBytes = Base64.getMimeDecoder().decode(encodedPassword.getBytes());
+                String encodedHexStr = DatatypeConverter.printHexBinary(encodedPasswordBytes).toUpperCase();
 
                 user.setEncodedPassword(encodedHexStr, cipher);
             }

http://git-wip-us.apache.org/repos/asf/syncope/blob/8776551b/core/spring/src/main/java/org/apache/syncope/core/spring/security/Encryptor.java
----------------------------------------------------------------------
diff --git a/core/spring/src/main/java/org/apache/syncope/core/spring/security/Encryptor.java b/core/spring/src/main/java/org/apache/syncope/core/spring/security/Encryptor.java
index 91cf40a..ee802b0 100644
--- a/core/spring/src/main/java/org/apache/syncope/core/spring/security/Encryptor.java
+++ b/core/spring/src/main/java/org/apache/syncope/core/spring/security/Encryptor.java
@@ -22,6 +22,7 @@ import java.io.UnsupportedEncodingException;
 import java.nio.charset.StandardCharsets;
 import java.security.InvalidKeyException;
 import java.security.NoSuchAlgorithmException;
+import java.util.Base64;
 import java.util.Map;
 import java.util.Properties;
 import java.util.concurrent.ConcurrentHashMap;
@@ -39,7 +40,6 @@ import org.jasypt.digest.StandardStringDigester;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.security.crypto.bcrypt.BCrypt;
-import org.springframework.security.crypto.codec.Base64;
 
 public final class Encryptor {
 
@@ -180,7 +180,7 @@ public final class Encryptor {
                 final Cipher cipher = Cipher.getInstance(CipherAlgorithm.AES.getAlgorithm());
                 cipher.init(Cipher.ENCRYPT_MODE, keySpec);
 
-                encodedValue = new String(Base64.encode(cipher.doFinal(cleartext)));
+                encodedValue = new String(Base64.getMimeEncoder().encode(cipher.doFinal(cleartext)));
             } else if (cipherAlgorithm == CipherAlgorithm.BCRYPT) {
                 encodedValue = BCrypt.hashpw(value, BCrypt.gensalt());
             } else {
@@ -223,7 +223,7 @@ public final class Encryptor {
             final Cipher cipher = Cipher.getInstance(CipherAlgorithm.AES.getAlgorithm());
             cipher.init(Cipher.DECRYPT_MODE, keySpec);
 
-            value = new String(cipher.doFinal(Base64.decode(encoded)), StandardCharsets.UTF_8);
+            value = new String(cipher.doFinal(Base64.getMimeDecoder().decode(encoded)), StandardCharsets.UTF_8);
         }
 
         return value;

http://git-wip-us.apache.org/repos/asf/syncope/blob/8776551b/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/AbstractUserWorkflowAdapter.java
----------------------------------------------------------------------
diff --git a/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/AbstractUserWorkflowAdapter.java b/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/AbstractUserWorkflowAdapter.java
index 8f3b9c7..c5a9c3a 100644
--- a/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/AbstractUserWorkflowAdapter.java
+++ b/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/AbstractUserWorkflowAdapter.java
@@ -18,6 +18,7 @@
  */
 package org.apache.syncope.core.workflow.java;
 
+import java.util.Base64;
 import org.apache.commons.lang3.tuple.ImmutablePair;
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.syncope.common.lib.patch.UserPatch;
@@ -29,7 +30,6 @@ import org.apache.syncope.core.provisioning.api.WorkflowResult;
 import org.apache.syncope.core.provisioning.api.data.UserDataBinder;
 import org.apache.syncope.core.workflow.api.UserWorkflowAdapter;
 import org.apache.syncope.core.workflow.api.UserWorkflowDefinitionAdapter;
-import org.identityconnectors.common.Base64;
 import org.identityconnectors.common.security.EncryptorFactory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -52,13 +52,14 @@ public abstract class AbstractUserWorkflowAdapter implements UserWorkflowAdapter
     protected EntityFactory entityFactory;
 
     protected String encrypt(final String clear) {
-        byte[] encryptedBytes = EncryptorFactory.getInstance().getDefaultEncryptor().encrypt(clear.getBytes());
-        return Base64.encode(encryptedBytes);
+        byte[] encrypted = EncryptorFactory.getInstance().getDefaultEncryptor().encrypt(clear.getBytes());
+        return Base64.getMimeEncoder().encodeToString(encrypted);
     }
 
     protected String decrypt(final String crypted) {
-        byte[] decryptedBytes = EncryptorFactory.getInstance().getDefaultEncryptor().decrypt(Base64.decode(crypted));
-        return new String(decryptedBytes);
+        byte[] decrypted = EncryptorFactory.getInstance().getDefaultEncryptor().
+                decrypt(Base64.getMimeDecoder().decode(crypted));
+        return new String(decrypted);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/8776551b/ext/saml2sp/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/SAML2IdPDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/ext/saml2sp/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/SAML2IdPDataBinderImpl.java b/ext/saml2sp/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/SAML2IdPDataBinderImpl.java
index bf7d409..ee84197 100644
--- a/ext/saml2sp/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/SAML2IdPDataBinderImpl.java
+++ b/ext/saml2sp/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/SAML2IdPDataBinderImpl.java
@@ -18,6 +18,7 @@
  */
 package org.apache.syncope.core.provisioning.java.data;
 
+import java.util.Base64;
 import java.util.stream.Collectors;
 import org.apache.syncope.common.lib.SyncopeClientCompositeException;
 import org.apache.syncope.common.lib.SyncopeClientException;
@@ -31,7 +32,6 @@ import org.apache.syncope.common.lib.types.MappingPurpose;
 import org.apache.syncope.common.lib.types.SchemaType;
 import org.apache.syncope.core.persistence.api.dao.AnyTypeDAO;
 import org.apache.syncope.core.persistence.api.dao.SAML2IdPDAO;
-import org.apache.syncope.core.persistence.api.entity.AnyTypeClass;
 import org.apache.syncope.core.persistence.api.entity.SAML2EntityFactory;
 import org.apache.syncope.core.persistence.api.entity.SAML2IdP;
 import org.apache.syncope.core.persistence.api.entity.SAML2IdPItem;
@@ -41,7 +41,6 @@ import org.apache.syncope.core.provisioning.api.data.SAML2IdPDataBinder;
 import org.apache.syncope.core.provisioning.java.IntAttrNameParser;
 import org.apache.syncope.core.provisioning.java.jexl.JexlUtils;
 import org.apache.syncope.core.spring.BeanUtils;
-import org.identityconnectors.common.Base64;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -165,7 +164,7 @@ public class SAML2IdPDataBinderImpl implements SAML2IdPDataBinder {
     public SAML2IdP update(final SAML2IdP idp, final SAML2IdPTO idpTO) {
         idp.setEntityID(idpTO.getEntityID());
         idp.setName(idpTO.getName());
-        idp.setMetadata(Base64.decode(idpTO.getMetadata()));
+        idp.setMetadata(Base64.getMimeDecoder().decode(idpTO.getMetadata()));
         idp.setCreateUnmatching(idpTO.isCreateUnmatching());
         idp.setUpdateMatching(idpTO.isUpdateMatching());
         idp.setUseDeflateEncoding(idpTO.isUseDeflateEncoding());
@@ -186,14 +185,14 @@ public class SAML2IdPDataBinderImpl implements SAML2IdPDataBinder {
 
         idp.getItems().clear();
         AnyTypeClassTO allowedSchemas = new AnyTypeClassTO();
-        for (AnyTypeClass anyTypeClass : anyTypeDAO.findUser().getClasses()) {
+        anyTypeDAO.findUser().getClasses().forEach(anyTypeClass -> {
             allowedSchemas.getPlainSchemas().addAll(anyTypeClass.getPlainSchemas().stream().
                     map(s -> s.getKey()).collect(Collectors.toList()));
             allowedSchemas.getDerSchemas().addAll(anyTypeClass.getDerSchemas().stream().
                     map(s -> s.getKey()).collect(Collectors.toList()));
             allowedSchemas.getVirSchemas().addAll(anyTypeClass.getVirSchemas().stream().
                     map(s -> s.getKey()).collect(Collectors.toList()));
-        }
+        });
         populateItems(idpTO, idp, allowedSchemas);
 
         idp.getActionsClassNames().clear();
@@ -203,7 +202,7 @@ public class SAML2IdPDataBinderImpl implements SAML2IdPDataBinder {
     }
 
     private void populateItems(final SAML2IdP idp, final SAML2IdPTO idpTO) {
-        for (SAML2IdPItem item : idp.getItems()) {
+        idp.getItems().forEach(item -> {
             ItemTO itemTO = new ItemTO();
             itemTO.setKey(item.getKey());
             BeanUtils.copyProperties(item, itemTO, ITEM_IGNORE_PROPERTIES);
@@ -214,7 +213,7 @@ public class SAML2IdPDataBinderImpl implements SAML2IdPDataBinder {
             } else {
                 idpTO.add(itemTO);
             }
-        }
+        });
     }
 
     @Override
@@ -228,7 +227,7 @@ public class SAML2IdPDataBinderImpl implements SAML2IdPDataBinder {
         idpTO.setBindingType(idp.getBindingType());
         idpTO.setCreateUnmatching(idp.isCreateUnmatching());
         idpTO.setUpdateMatching(idp.isUpdateMatching());
-        idpTO.setMetadata(Base64.encode(idp.getMetadata()));
+        idpTO.setMetadata(Base64.getMimeEncoder().encodeToString(idp.getMetadata()));
 
         if (idp.getUserTemplate() != null) {
             idpTO.setUserTemplate((UserTO) idp.getUserTemplate().get());

http://git-wip-us.apache.org/repos/asf/syncope/blob/8776551b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SAML2ITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SAML2ITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SAML2ITCase.java
index e20c77c..35e3efa 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SAML2ITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SAML2ITCase.java
@@ -45,6 +45,7 @@ import java.util.Base64;
 import java.util.Collections;
 import java.util.Date;
 import java.util.Optional;
+import java.util.regex.Pattern;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 import javax.xml.namespace.QName;
@@ -101,6 +102,9 @@ import org.w3c.dom.Element;
 
 public class SAML2ITCase extends AbstractITCase {
 
+    private static final Pattern BASE64 = Pattern.compile(
+            "^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})$");
+
     private static SyncopeClient anonymous;
 
     private static Path keystorePath;
@@ -153,9 +157,9 @@ public class SAML2ITCase extends AbstractITCase {
             return;
         }
 
-        for (SAML2IdPTO idp : saml2IdPService.list()) {
+        saml2IdPService.list().forEach(idp -> {
             saml2IdPService.delete(idp.getKey());
-        }
+        });
 
         Files.delete(keystorePath);
         Files.delete(truststorePath);
@@ -203,7 +207,7 @@ public class SAML2ITCase extends AbstractITCase {
 
         assertEquals("https://idp.testshib.org/idp/profile/SAML2/POST/SSO", loginRequest.getIdpServiceAddress());
         assertNotNull(loginRequest.getContent());
-        assertTrue(org.apache.commons.codec.binary.Base64.isBase64(loginRequest.getContent()));
+        assertTrue(BASE64.matcher(loginRequest.getContent()).matches());
         assertNotNull(loginRequest.getRelayState());
     }
 
@@ -257,7 +261,7 @@ public class SAML2ITCase extends AbstractITCase {
 
         assertEquals("https://localhost:8443/fediz-idp/saml/up", loginRequest.getIdpServiceAddress());
         assertNotNull(loginRequest.getContent());
-        assertTrue(org.apache.commons.codec.binary.Base64.isBase64(loginRequest.getContent()));
+        assertTrue(BASE64.matcher(loginRequest.getContent()).matches());
         assertNotNull(loginRequest.getRelayState());
 
         // Check a null relaystate

http://git-wip-us.apache.org/repos/asf/syncope/blob/8776551b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserIssuesITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserIssuesITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserIssuesITCase.java
index 4a1c445..5d679f7 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserIssuesITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserIssuesITCase.java
@@ -27,16 +27,17 @@ import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
 import java.io.IOException;
+import java.util.Base64;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import java.util.Set;
 import javax.naming.NamingException;
 import javax.sql.DataSource;
 import javax.ws.rs.core.GenericType;
 import org.apache.commons.lang3.tuple.Pair;
-import org.apache.cxf.common.util.Base64Utility;
 import org.apache.cxf.helpers.IOUtils;
 import org.apache.syncope.common.lib.SyncopeClientException;
 import org.apache.syncope.common.lib.SyncopeConstants;
@@ -611,11 +612,11 @@ public class UserIssuesITCase extends AbstractITCase {
     public void issueSYNCOPE354() {
         // change resource-ldap group mapping for including uniqueMember (need for assertions below)
         ResourceTO ldap = resourceService.read(RESOURCE_NAME_LDAP);
-        for (ItemTO item : ldap.getProvision(AnyTypeKind.GROUP.name()).get().getMapping().getItems()) {
-            if ("description".equals(item.getExtAttrName())) {
-                item.setExtAttrName("uniqueMember");
-            }
-        }
+        ldap.getProvision(AnyTypeKind.GROUP.name()).get().getMapping().getItems().stream().
+                filter(item -> ("description".equals(item.getExtAttrName()))).
+                forEachOrdered(item -> {
+                    item.setExtAttrName("uniqueMember");
+                });
         resourceService.update(ldap);
 
         // 1. create group with LDAP resource
@@ -658,11 +659,11 @@ public class UserIssuesITCase extends AbstractITCase {
                 contains("uid=" + userTO.getUsername() + ",ou=people,o=isp"));
 
         // 6. restore original resource-ldap group mapping
-        for (ItemTO item : ldap.getProvision(AnyTypeKind.GROUP.name()).get().getMapping().getItems()) {
-            if ("uniqueMember".equals(item.getExtAttrName())) {
-                item.setExtAttrName("description");
-            }
-        }
+        ldap.getProvision(AnyTypeKind.GROUP.name()).get().getMapping().getItems().stream().
+                filter(item -> ("uniqueMember".equals(item.getExtAttrName()))).
+                forEachOrdered(item -> {
+                    item.setExtAttrName("description");
+                });
         resourceService.update(ldap);
     }
 
@@ -680,8 +681,8 @@ public class UserIssuesITCase extends AbstractITCase {
         // 2. create user with membership of the above group
         UserTO userTO = UserITCase.getUniqueSampleTO("syncope357@syncope.apache.org");
         userTO.getPlainAttrs().add(attrTO("obscure", "valueToBeObscured"));
-        userTO.getPlainAttrs().add(attrTO("photo",
-                Base64Utility.encode(IOUtils.readBytesFromStream(getClass().getResourceAsStream("/favicon.jpg")))));
+        userTO.getPlainAttrs().add(attrTO("photo", Base64.getMimeEncoder().encodeToString(
+                IOUtils.readBytesFromStream(getClass().getResourceAsStream("/favicon.jpg")))));
         userTO.getMemberships().add(new MembershipTO.Builder().group(groupTO.getKey()).build());
 
         userTO = createUser(userTO).getEntity();
@@ -696,9 +697,12 @@ public class UserIssuesITCase extends AbstractITCase {
         AttrTO registeredAddress = connObj.getAttr("registeredAddress").get();
         assertNotNull(registeredAddress);
         assertEquals(userTO.getPlainAttr("obscure").get().getValues(), registeredAddress.getValues());
-        AttrTO jpegPhoto = connObj.getAttr("jpegPhoto").get();
-        assertNotNull(jpegPhoto);
-        assertEquals(userTO.getPlainAttr("photo").get().getValues(), jpegPhoto.getValues());
+        Optional<AttrTO> jpegPhoto = connObj.getAttr("jpegPhoto");
+        assertTrue(jpegPhoto.isPresent());
+        // difference between java.util.Base64 encoding and ConnId's
+        assertEquals(
+                userTO.getPlainAttr("photo").get().getValues().get(0).replace("\n", "").replace("\r", ""),
+                jpegPhoto.get().getValues().get(0));
 
         // 4. remove group
         groupService.delete(groupTO.getKey());

http://git-wip-us.apache.org/repos/asf/syncope/blob/8776551b/installer/pom.xml
----------------------------------------------------------------------
diff --git a/installer/pom.xml b/installer/pom.xml
index 7db2240..8e8756c 100644
--- a/installer/pom.xml
+++ b/installer/pom.xml
@@ -80,10 +80,6 @@ under the License.
     </dependency>
 
     <dependency>
-      <groupId>commons-codec</groupId>
-      <artifactId>commons-codec</artifactId>
-    </dependency>
-    <dependency>
       <groupId>commons-logging</groupId>
       <artifactId>commons-logging</artifactId>
     </dependency>

http://git-wip-us.apache.org/repos/asf/syncope/blob/8776551b/installer/src/main/java/org/apache/syncope/installer/utilities/PasswordGenerator.java
----------------------------------------------------------------------
diff --git a/installer/src/main/java/org/apache/syncope/installer/utilities/PasswordGenerator.java b/installer/src/main/java/org/apache/syncope/installer/utilities/PasswordGenerator.java
index 79173a4..4d2c602 100644
--- a/installer/src/main/java/org/apache/syncope/installer/utilities/PasswordGenerator.java
+++ b/installer/src/main/java/org/apache/syncope/installer/utilities/PasswordGenerator.java
@@ -22,7 +22,7 @@ import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
 import java.util.logging.Level;
 import java.util.logging.Logger;
-import org.apache.commons.codec.binary.Hex;
+import javax.xml.bind.DatatypeConverter;
 
 public final class PasswordGenerator {
 
@@ -30,7 +30,7 @@ public final class PasswordGenerator {
         String pwd = "";
         try {
             final MessageDigest cript = MessageDigest.getInstance("SHA-1");
-            pwd = new String(Hex.encodeHex(cript.digest()));
+            pwd = DatatypeConverter.printHexBinary(cript.digest());
         } catch (final NoSuchAlgorithmException ex) {
             Logger.getLogger(PasswordGenerator.class.getName()).log(Level.SEVERE, "NoSuchAlgorithmException", ex);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/8776551b/installer/src/main/resources/izpack/install.xml
----------------------------------------------------------------------
diff --git a/installer/src/main/resources/izpack/install.xml b/installer/src/main/resources/izpack/install.xml
index 3a65898..45f9042 100644
--- a/installer/src/main/resources/izpack/install.xml
+++ b/installer/src/main/resources/izpack/install.xml
@@ -131,7 +131,6 @@ under the License.
   
   <jar src="../syncope-installer-@{syncope.version}.jar" stage="install"/>
   <jar src="lib/commons-logging-@{commons-logging.version}.jar"/>
-  <jar src="lib/commons-codec-@{commons-codec.version}.jar"/>
   <jar src="lib/commons-io-@{commons-io.version}.jar"/>
   <jar src="lib/commons-lang3-@{commons-lang.version}.jar"/>
   <jar src="lib/httpclient-@{httpclient.version}.jar"/>

http://git-wip-us.apache.org/repos/asf/syncope/blob/8776551b/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index df9e4f5..de2fdea 100644
--- a/pom.xml
+++ b/pom.xml
@@ -397,7 +397,6 @@ under the License.
 
     <commons-io.version>2.5</commons-io.version>
     <commons-email.version>1.5</commons-email.version>
-    <commons-codec.version>1.10</commons-codec.version>
     <commons-jexl.version>3.1</commons-jexl.version>
     <commons-lang.version>3.6</commons-lang.version>
     <commons-text.version>1.1</commons-text.version>
@@ -950,11 +949,6 @@ under the License.
         </exclusions>
       </dependency>
       <dependency>
-        <groupId>commons-codec</groupId>
-        <artifactId>commons-codec</artifactId>
-        <version>${commons-codec.version}</version>
-      </dependency>
-      <dependency>
         <groupId>org.apache.commons</groupId>
         <artifactId>commons-jexl3</artifactId>
         <version>${commons-jexl.version}</version>