This is an automated email from the ASF dual-hosted git repository.

ilgrosso pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/syncope.git


The following commit(s) were added to refs/heads/master by this push:
     new f84e6e55bb Various dependency upgrades following CAS 7.0
f84e6e55bb is described below

commit f84e6e55bb5d8f05041fed1f000dedceb0c81b00
Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
AuthorDate: Fri Sep 15 11:24:02 2023 +0200

    Various dependency upgrades following CAS 7.0
---
 .github/workflows/codeql-analysis.yml              |   4 +-
 .github/workflows/crosschecks.yml                  |   4 +-
 .github/workflows/fit_Elasticsearch.yml            |   4 +-
 .github/workflows/fit_Payara.yml                   |   4 +-
 .github/workflows/fit_Tomcat_H2_JSON.yml           |   4 +-
 .github/workflows/fit_Tomcat_H2_XML.yml            |   4 +-
 .github/workflows/fit_Tomcat_H2_YAML.yml           |   4 +-
 .github/workflows/fit_WA_SAML2PS4UI_OIDCC4UI.yml   |   4 +-
 .github/workflows/fit_WA_SRA_CASClient.yml         |   4 +-
 .github/workflows/fit_WA_SRA_OAuth2.yml            |   4 +-
 .github/workflows/fit_WA_SRA_OIDC.yml              |   4 +-
 .github/workflows/fit_WA_SRA_SAML2.yml             |   4 +-
 .github/workflows/fit_Wildfly.yml                  |   4 +-
 .github/workflows/fit_Zookeeper.yml                |   4 +-
 .github/workflows/mariadb.yml                      |   4 +-
 .github/workflows/mysql.yml                        |   8 +-
 .github/workflows/oracle.yml                       |   8 +-
 .github/workflows/postgresql.yml                   |   8 +-
 .../authprofiles/AuthProfileDirectoryPanel.java    |  59 --------
 .../client/console/commons/AMConstants.java        |   3 -
 .../AuthProfileDirectoryPanel.properties           |   3 -
 .../AuthProfileDirectoryPanel_fr_CA.properties     |   3 -
 .../AuthProfileDirectoryPanel_it.properties        |   3 -
 .../AuthProfileDirectoryPanel_ja.properties        |   3 -
 .../AuthProfileDirectoryPanel_pt_BR.properties     |   3 -
 .../AuthProfileDirectoryPanel_ru.properties        |   3 -
 .../syncope/client/ui/commons/BaseSession.java     |   4 +-
 .../syncope/common/lib/auth/AuthModuleConf.java    |   2 -
 .../syncope/common/lib/auth/U2FAuthModuleConf.java |  77 -----------
 .../syncope/common/lib/to/AuthProfileTO.java       |  26 ----
 .../apache/syncope/common/lib/wa/U2FDevice.java    | 121 ----------------
 .../common/rest/api/beans/U2FDeviceQuery.java      |  92 ------------
 .../api/service/wa/U2FRegistrationService.java     |  62 ---------
 .../apache/syncope/core/logic/AMLogicContext.java  |  11 --
 .../core/logic/wa/U2FRegistrationLogic.java        | 154 ---------------------
 .../syncope/core/rest/cxf/AMRESTCXFContext.java    |   9 --
 .../cxf/service/wa/U2FRegistrationServiceImpl.java |  60 --------
 .../apache/syncope/core/logic/ConnectorLogic.java  |   8 +-
 .../persistence/api/entity/am/AuthProfile.java     |   5 -
 .../src/test/resources/domains/MasterContent.xml   |   2 -
 .../persistence/jpa/entity/am/JPAAuthProfile.java  |  18 ---
 .../core/persistence/jpa/inner/AuthModuleTest.java |  32 -----
 .../persistence/jpa/inner/AuthProfileTest.java     |  32 +----
 .../src/test/resources/domains/MasterContent.xml   |   2 -
 .../java/data/AuthProfileDataBinderImpl.java       |   2 -
 .../provisioning/java/job/AfterHandlingJob.java    |   5 +-
 .../PriorityPropagationTaskExecutor.java           |   5 +-
 .../java/pushpull/PullJobDelegate.java             |  13 +-
 .../java/pushpull/PushJobDelegate.java             |  13 +-
 .../pushpull/stream/StreamPushJobDelegate.java     |  10 +-
 .../core/provisioning/java/utils/MappingUtils.java |   5 +-
 .../implementation/ImplementationManager.java      |  13 +-
 .../core/spring/security/AuthDataAccessor.java     |   4 +-
 .../support/SyncopeIdmIdentityService.java         |   7 +-
 .../apache/syncope/core/logic/OIDCC4UILogic.java   |   7 +-
 .../org/apache/syncope/fit/AbstractITCase.java     |   4 -
 .../apache/syncope/fit/console/UsersITCase.java    |  12 +-
 .../apache/syncope/fit/core/AuthModuleITCase.java  |  46 +-----
 .../syncope/fit/core/wa/U2FRegistrationITCase.java |  94 -------------
 pom.xml                                            |  35 +++--
 sra/pom.xml                                        |   1 -
 .../syncope/sra/ApplicationContextUtils.java       |   7 +-
 .../apache/syncope/sra/security/cas/CASUtils.java  |   5 +-
 .../security/pac4j/ServerWebExchangeContext.java   |  18 ++-
 .../concepts/authenticationmodules.adoc            |   1 -
 .../mapping/AuthModulePropertySourceMapper.java    |  16 ---
 wa/starter/pom.xml                                 |   8 --
 .../syncope/wa/starter/config/WAContext.java       |  21 ---
 .../wa/starter/config/WARefreshContextJob.java     |   4 +-
 .../idp/metadata/WASamlIdPMetadataGenerator.java   |   5 -
 .../wa/starter/u2f/WAU2FDeviceRepository.java      | 138 ------------------
 .../WASurrogateAuthenticationServiceTest.java      |   2 +-
 72 files changed, 127 insertions(+), 1255 deletions(-)

diff --git a/.github/workflows/codeql-analysis.yml 
b/.github/workflows/codeql-analysis.yml
index 48f092755b..b1ade62adf 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -46,11 +46,11 @@ jobs:
       uses: actions/setup-java@v3
       with:
         distribution: 'zulu'
-        java-version: 17
+        java-version: 21-ea
     - name: Setup Maven
       uses: stCarolas/[email protected]
       with:
-        maven-version: 3.9.0
+        maven-version: 3.9.4
     - uses: actions/cache@v3
       with:
         path: ~/.m2/repository
diff --git a/.github/workflows/crosschecks.yml 
b/.github/workflows/crosschecks.yml
index 01eac38fa3..ffe2735772 100644
--- a/.github/workflows/crosschecks.yml
+++ b/.github/workflows/crosschecks.yml
@@ -33,7 +33,7 @@ jobs:
       fail-fast: false
       matrix:
         language: ['java']
-        java: [ '17', '20' ]
+        java: [ '21-ea' ]
         os: [ubuntu-latest, windows-latest, macos-latest]
 
     steps:
@@ -47,7 +47,7 @@ jobs:
     - name: Setup Maven
       uses: stCarolas/[email protected]
       with:
-        maven-version: 3.9.0
+        maven-version: 3.9.4
     - uses: actions/cache@v3
       with:
         path: ~/.m2/repository
diff --git a/.github/workflows/fit_Elasticsearch.yml 
b/.github/workflows/fit_Elasticsearch.yml
index 59800b34a1..6c55ee97a9 100644
--- a/.github/workflows/fit_Elasticsearch.yml
+++ b/.github/workflows/fit_Elasticsearch.yml
@@ -36,11 +36,11 @@ jobs:
       uses: actions/setup-java@v3
       with:
         distribution: 'zulu'
-        java-version: 17
+        java-version: 21-ea
     - name: Setup Maven
       uses: stCarolas/[email protected]
       with:
-        maven-version: 3.9.0
+        maven-version: 3.9.4
     - uses: actions/cache@v3
       with:
         path: ~/.m2/repository
diff --git a/.github/workflows/fit_Payara.yml b/.github/workflows/fit_Payara.yml
index 0a816ad336..0d438ee18a 100644
--- a/.github/workflows/fit_Payara.yml
+++ b/.github/workflows/fit_Payara.yml
@@ -36,11 +36,11 @@ jobs:
       uses: actions/setup-java@v3
       with:
         distribution: 'zulu'
-        java-version: 17
+        java-version: 21-ea
     - name: Setup Maven
       uses: stCarolas/[email protected]
       with:
-        maven-version: 3.9.0
+        maven-version: 3.9.4
     - uses: actions/cache@v3
       with:
         path: ~/.m2/repository
diff --git a/.github/workflows/fit_Tomcat_H2_JSON.yml 
b/.github/workflows/fit_Tomcat_H2_JSON.yml
index 50151ffdbe..bd48e74757 100644
--- a/.github/workflows/fit_Tomcat_H2_JSON.yml
+++ b/.github/workflows/fit_Tomcat_H2_JSON.yml
@@ -36,11 +36,11 @@ jobs:
       uses: actions/setup-java@v3
       with:
         distribution: 'zulu'
-        java-version: 17
+        java-version: 21-ea
     - name: Setup Maven
       uses: stCarolas/[email protected]
       with:
-        maven-version: 3.9.0
+        maven-version: 3.9.4
     - uses: actions/cache@v3
       with:
         path: ~/.m2/repository
diff --git a/.github/workflows/fit_Tomcat_H2_XML.yml 
b/.github/workflows/fit_Tomcat_H2_XML.yml
index 50322cb695..c70ffa5dff 100644
--- a/.github/workflows/fit_Tomcat_H2_XML.yml
+++ b/.github/workflows/fit_Tomcat_H2_XML.yml
@@ -36,11 +36,11 @@ jobs:
       uses: actions/setup-java@v3
       with:
         distribution: 'zulu'
-        java-version: 17
+        java-version: 21-ea
     - name: Setup Maven
       uses: stCarolas/[email protected]
       with:
-        maven-version: 3.9.0
+        maven-version: 3.9.4
     - uses: actions/cache@v3
       with:
         path: ~/.m2/repository
diff --git a/.github/workflows/fit_Tomcat_H2_YAML.yml 
b/.github/workflows/fit_Tomcat_H2_YAML.yml
index b8066a5c97..b9eca28a64 100644
--- a/.github/workflows/fit_Tomcat_H2_YAML.yml
+++ b/.github/workflows/fit_Tomcat_H2_YAML.yml
@@ -36,11 +36,11 @@ jobs:
       uses: actions/setup-java@v3
       with:
         distribution: 'zulu'
-        java-version: 17
+        java-version: 21-ea
     - name: Setup Maven
       uses: stCarolas/[email protected]
       with:
-        maven-version: 3.9.0
+        maven-version: 3.9.4
     - uses: actions/cache@v3
       with:
         path: ~/.m2/repository
diff --git a/.github/workflows/fit_WA_SAML2PS4UI_OIDCC4UI.yml 
b/.github/workflows/fit_WA_SAML2PS4UI_OIDCC4UI.yml
index f19a1a8f74..c81a2e1ec6 100644
--- a/.github/workflows/fit_WA_SAML2PS4UI_OIDCC4UI.yml
+++ b/.github/workflows/fit_WA_SAML2PS4UI_OIDCC4UI.yml
@@ -36,11 +36,11 @@ jobs:
       uses: actions/setup-java@v3
       with:
         distribution: 'zulu'
-        java-version: 17
+        java-version: 21-ea
     - name: Setup Maven
       uses: stCarolas/[email protected]
       with:
-        maven-version: 3.9.0
+        maven-version: 3.9.4
     - uses: actions/cache@v3
       with:
         path: ~/.m2/repository
diff --git a/.github/workflows/fit_WA_SRA_CASClient.yml 
b/.github/workflows/fit_WA_SRA_CASClient.yml
index 8f00bbfe53..ac84ef464a 100644
--- a/.github/workflows/fit_WA_SRA_CASClient.yml
+++ b/.github/workflows/fit_WA_SRA_CASClient.yml
@@ -36,11 +36,11 @@ jobs:
       uses: actions/setup-java@v3
       with:
         distribution: 'zulu'
-        java-version: 17
+        java-version: 21-ea
     - name: Setup Maven
       uses: stCarolas/[email protected]
       with:
-        maven-version: 3.9.0
+        maven-version: 3.9.4
     - uses: actions/cache@v3
       with:
         path: ~/.m2/repository
diff --git a/.github/workflows/fit_WA_SRA_OAuth2.yml 
b/.github/workflows/fit_WA_SRA_OAuth2.yml
index fb9617bdf0..0dacfcd464 100644
--- a/.github/workflows/fit_WA_SRA_OAuth2.yml
+++ b/.github/workflows/fit_WA_SRA_OAuth2.yml
@@ -36,11 +36,11 @@ jobs:
       uses: actions/setup-java@v3
       with:
         distribution: 'zulu'
-        java-version: 17
+        java-version: 21-ea
     - name: Setup Maven
       uses: stCarolas/[email protected]
       with:
-        maven-version: 3.9.0
+        maven-version: 3.9.4
     - uses: actions/cache@v3
       with:
         path: ~/.m2/repository
diff --git a/.github/workflows/fit_WA_SRA_OIDC.yml 
b/.github/workflows/fit_WA_SRA_OIDC.yml
index 9b3cc7edfe..4d516a8152 100644
--- a/.github/workflows/fit_WA_SRA_OIDC.yml
+++ b/.github/workflows/fit_WA_SRA_OIDC.yml
@@ -36,11 +36,11 @@ jobs:
       uses: actions/setup-java@v3
       with:
         distribution: 'zulu'
-        java-version: 17
+        java-version: 21-ea
     - name: Setup Maven
       uses: stCarolas/[email protected]
       with:
-        maven-version: 3.9.0
+        maven-version: 3.9.4
     - uses: actions/cache@v3
       with:
         path: ~/.m2/repository
diff --git a/.github/workflows/fit_WA_SRA_SAML2.yml 
b/.github/workflows/fit_WA_SRA_SAML2.yml
index 62c4459cdd..c5d80690fc 100644
--- a/.github/workflows/fit_WA_SRA_SAML2.yml
+++ b/.github/workflows/fit_WA_SRA_SAML2.yml
@@ -36,11 +36,11 @@ jobs:
       uses: actions/setup-java@v3
       with:
         distribution: 'zulu'
-        java-version: 17
+        java-version: 21-ea
     - name: Setup Maven
       uses: stCarolas/[email protected]
       with:
-        maven-version: 3.9.0
+        maven-version: 3.9.4
     - uses: actions/cache@v3
       with:
         path: ~/.m2/repository
diff --git a/.github/workflows/fit_Wildfly.yml 
b/.github/workflows/fit_Wildfly.yml
index 82a54ad592..7ab1730bd7 100644
--- a/.github/workflows/fit_Wildfly.yml
+++ b/.github/workflows/fit_Wildfly.yml
@@ -36,11 +36,11 @@ jobs:
       uses: actions/setup-java@v3
       with:
         distribution: 'zulu'
-        java-version: 17
+        java-version: 21-ea
     - name: Setup Maven
       uses: stCarolas/[email protected]
       with:
-        maven-version: 3.9.0
+        maven-version: 3.9.4
     - uses: actions/cache@v3
       with:
         path: ~/.m2/repository
diff --git a/.github/workflows/fit_Zookeeper.yml 
b/.github/workflows/fit_Zookeeper.yml
index 543004138e..164c70e065 100644
--- a/.github/workflows/fit_Zookeeper.yml
+++ b/.github/workflows/fit_Zookeeper.yml
@@ -36,11 +36,11 @@ jobs:
       uses: actions/setup-java@v3
       with:
         distribution: 'zulu'
-        java-version: 17
+        java-version: 21-ea
     - name: Setup Maven
       uses: stCarolas/[email protected]
       with:
-        maven-version: 3.9.0
+        maven-version: 3.9.4
     - uses: actions/cache@v3
       with:
         path: ~/.m2/repository
diff --git a/.github/workflows/mariadb.yml b/.github/workflows/mariadb.yml
index 2dadc3e1db..8a15fb4185 100644
--- a/.github/workflows/mariadb.yml
+++ b/.github/workflows/mariadb.yml
@@ -36,11 +36,11 @@ jobs:
       uses: actions/setup-java@v3
       with:
         distribution: 'zulu'
-        java-version: 17
+        java-version: 21-ea
     - name: Setup Maven
       uses: stCarolas/[email protected]
       with:
-        maven-version: 3.9.0
+        maven-version: 3.9.4
     - uses: actions/cache@v3
       with:
         path: ~/.m2/repository
diff --git a/.github/workflows/mysql.yml b/.github/workflows/mysql.yml
index 63608cdf4f..1c9637bc0e 100644
--- a/.github/workflows/mysql.yml
+++ b/.github/workflows/mysql.yml
@@ -36,11 +36,11 @@ jobs:
       uses: actions/setup-java@v3
       with:
         distribution: 'zulu'
-        java-version: 17
+        java-version: 21-ea
     - name: Setup Maven
       uses: stCarolas/[email protected]
       with:
-        maven-version: 3.9.0
+        maven-version: 3.9.4
     - uses: actions/cache@v3
       with:
         path: ~/.m2/repository
@@ -62,11 +62,11 @@ jobs:
       uses: actions/setup-java@v3
       with:
         distribution: 'zulu'      
-        java-version: 17
+        java-version: 21-ea
     - name: Setup Maven
       uses: stCarolas/[email protected]
       with:
-        maven-version: 3.9.0
+        maven-version: 3.9.4
     - uses: actions/cache@v3
       with:
         path: ~/.m2/repository
diff --git a/.github/workflows/oracle.yml b/.github/workflows/oracle.yml
index 42b7aa7af7..eab09625aa 100644
--- a/.github/workflows/oracle.yml
+++ b/.github/workflows/oracle.yml
@@ -36,11 +36,11 @@ jobs:
       uses: actions/setup-java@v3
       with:
         distribution: 'zulu'      
-        java-version: 17
+        java-version: 21-ea
     - name: Setup Maven
       uses: stCarolas/[email protected]
       with:
-        maven-version: 3.9.0
+        maven-version: 3.9.4
     - uses: actions/cache@v3
       with:
         path: ~/.m2/repository
@@ -62,11 +62,11 @@ jobs:
       uses: actions/setup-java@v3
       with:
         distribution: 'zulu'      
-        java-version: 17
+        java-version: 21-ea
     - name: Setup Maven
       uses: stCarolas/[email protected]
       with:
-        maven-version: 3.9.0
+        maven-version: 3.9.4
     - uses: actions/cache@v3
       with:
         path: ~/.m2/repository
diff --git a/.github/workflows/postgresql.yml b/.github/workflows/postgresql.yml
index 33113c082e..c330f54417 100644
--- a/.github/workflows/postgresql.yml
+++ b/.github/workflows/postgresql.yml
@@ -36,11 +36,11 @@ jobs:
       uses: actions/setup-java@v3
       with:
         distribution: 'zulu'      
-        java-version: 17
+        java-version: 21-ea
     - name: Setup Maven
       uses: stCarolas/[email protected]
       with:
-        maven-version: 3.9.0
+        maven-version: 3.9.4
     - uses: actions/cache@v3
       with:
         path: ~/.m2/repository
@@ -62,11 +62,11 @@ jobs:
       uses: actions/setup-java@v3
       with:
         distribution: 'zulu'      
-        java-version: 17
+        java-version: 21-ea
     - name: Setup Maven
       uses: stCarolas/[email protected]
       with:
-        maven-version: 3.9.0
+        maven-version: 3.9.4
     - uses: actions/cache@v3
       with:
         path: ~/.m2/repository
diff --git 
a/client/am/console/src/main/java/org/apache/syncope/client/console/authprofiles/AuthProfileDirectoryPanel.java
 
b/client/am/console/src/main/java/org/apache/syncope/client/console/authprofiles/AuthProfileDirectoryPanel.java
index 44f49d8d86..af2015268b 100644
--- 
a/client/am/console/src/main/java/org/apache/syncope/client/console/authprofiles/AuthProfileDirectoryPanel.java
+++ 
b/client/am/console/src/main/java/org/apache/syncope/client/console/authprofiles/AuthProfileDirectoryPanel.java
@@ -46,7 +46,6 @@ import org.apache.syncope.common.lib.wa.GoogleMfaAuthAccount;
 import org.apache.syncope.common.lib.wa.GoogleMfaAuthToken;
 import org.apache.syncope.common.lib.wa.ImpersonationAccount;
 import org.apache.syncope.common.lib.wa.MfaTrustedDevice;
-import org.apache.syncope.common.lib.wa.U2FDevice;
 import org.apache.syncope.common.lib.wa.WebAuthnDeviceCredential;
 import org.apache.wicket.PageReference;
 import org.apache.wicket.ajax.AjaxRequestTarget;
@@ -149,15 +148,6 @@ public class AuthProfileDirectoryPanel
                 return 
!rowModel.getObject().getGoogleMfaAuthAccounts().isEmpty();
             }
         });
-        columns.add(new BooleanConditionColumn<>(new 
StringResourceModel("u2fRegisteredDevices")) {
-
-            private static final long serialVersionUID = -8236820422411536323L;
-
-            @Override
-            protected boolean isCondition(final IModel<AuthProfileTO> 
rowModel) {
-                return 
!rowModel.getObject().getU2FRegisteredDevices().isEmpty();
-            }
-        });
         columns.add(new BooleanConditionColumn<>(new 
StringResourceModel("mfaTrustedDevices")) {
 
             private static final long serialVersionUID = -8236820422411536323L;
@@ -329,55 +319,6 @@ public class AuthProfileDirectoryPanel
             }
         }, ActionLink.ActionType.EXECUTE, AMEntitlement.AUTH_PROFILE_UPDATE);
 
-        panel.add(new ActionLink<>() {
-
-            private static final long serialVersionUID = -3722207913631435501L;
-
-            @Override
-            public void onClick(final AjaxRequestTarget target, final 
AuthProfileTO ignore) {
-                model.setObject(restClient.read(model.getObject().getKey()));
-                target.add(authProfileModal.setContent(new 
ModalDirectoryPanel<>(
-                        authProfileModal,
-                        new AuthProfileItemDirectoryPanel<U2FDevice>(
-                                "panel", restClient, authProfileModal, 
model.getObject(), pageRef) {
-
-                    private static final long serialVersionUID = 
5788448799796630011L;
-
-                    @Override
-                    protected List<U2FDevice> getItems() {
-                        return model.getObject().getU2FRegisteredDevices();
-                    }
-
-                    @Override
-                    protected U2FDevice defaultItem() {
-                        return new U2FDevice();
-                    }
-
-                    @Override
-                    protected String sortProperty() {
-                        return "id";
-                    }
-
-                    @Override
-                    protected String paginatorRowsKey() {
-                        return 
AMConstants.PREF_AUTHPROFILE_U2FDEVICES_PAGINATOR_ROWS;
-                    }
-
-                    @Override
-                    protected List<IColumn<U2FDevice, String>> getColumns() {
-                        List<IColumn<U2FDevice, String>> columns = new 
ArrayList<>();
-                        columns.add(new PropertyColumn<>(new 
ResourceModel("id"), "id", "id"));
-                        columns.add(new DatePropertyColumn<>(
-                                new ResourceModel("issueDate"), "issueDate", 
"issueDate"));
-                        columns.add(new PropertyColumn<>(new 
ResourceModel("record"), "record", "record"));
-                        return columns;
-                    }
-                }, pageRef)));
-                authProfileModal.header(new 
Model<>(getString("u2fRegisteredDevices", model)));
-                authProfileModal.show(true);
-            }
-        }, ActionLink.ActionType.DEPROVISION, 
AMEntitlement.AUTH_PROFILE_UPDATE);
-
         panel.add(new ActionLink<>() {
 
             private static final long serialVersionUID = -3722207913631435501L;
diff --git 
a/client/am/console/src/main/java/org/apache/syncope/client/console/commons/AMConstants.java
 
b/client/am/console/src/main/java/org/apache/syncope/client/console/commons/AMConstants.java
index 08c9663fb5..3f6af5ab8d 100644
--- 
a/client/am/console/src/main/java/org/apache/syncope/client/console/commons/AMConstants.java
+++ 
b/client/am/console/src/main/java/org/apache/syncope/client/console/commons/AMConstants.java
@@ -48,9 +48,6 @@ public final class AMConstants {
     public static final String 
PREF_AUTHPROFILE_GOOGLEMFAAUTHACCOUNTS_PAGINATOR_ROWS =
             "authprofile.googlemfaauthaccounts.paginator.rows";
 
-    public static final String PREF_AUTHPROFILE_U2FDEVICES_PAGINATOR_ROWS =
-            "authprofile.u2fdevices.paginator.rows";
-
     public static final String 
PREF_AUTHPROFILE_MFA_TRUSTED_FDEVICES_PAGINATOR_ROWS =
             "authprofile.mfaTrustedDevices.paginator.rows";
 
diff --git 
a/client/am/console/src/main/resources/org/apache/syncope/client/console/authprofiles/AuthProfileDirectoryPanel.properties
 
b/client/am/console/src/main/resources/org/apache/syncope/client/console/authprofiles/AuthProfileDirectoryPanel.properties
index 49b21ba589..996c6321df 100644
--- 
a/client/am/console/src/main/resources/org/apache/syncope/client/console/authprofiles/AuthProfileDirectoryPanel.properties
+++ 
b/client/am/console/src/main/resources/org/apache/syncope/client/console/authprofiles/AuthProfileDirectoryPanel.properties
@@ -21,7 +21,6 @@ owner=Owner
 impersonationAccounts=Impersonations
 googleMfaAuthTokens=Google MFA Tokens
 googleMfaAuthAccounts=Google MFA Accounts
-u2fRegisteredDevices=U2F Devices
 webAuthnAccount=WebAuthn
 type_extensions.title=impersonations
 type_extensions.class=fas fa-user-friends
@@ -37,8 +36,6 @@ secretKey=Secret Key
 validationCode=Validation Code
 scratchCodes=Scratch Codes
 record=Record
-deprovision.class=fab fa-usb
-deprovision.title=u2f Devices
 identifier=Identifier
 json=JSON
 html.class=fas fa-at
diff --git 
a/client/am/console/src/main/resources/org/apache/syncope/client/console/authprofiles/AuthProfileDirectoryPanel_fr_CA.properties
 
b/client/am/console/src/main/resources/org/apache/syncope/client/console/authprofiles/AuthProfileDirectoryPanel_fr_CA.properties
index 5e1a601fa4..4d543c7877 100644
--- 
a/client/am/console/src/main/resources/org/apache/syncope/client/console/authprofiles/AuthProfileDirectoryPanel_fr_CA.properties
+++ 
b/client/am/console/src/main/resources/org/apache/syncope/client/console/authprofiles/AuthProfileDirectoryPanel_fr_CA.properties
@@ -21,7 +21,6 @@ owner=Owner
 impersonationAccounts=Impersonations
 googleMfaAuthTokens=Google MFA Tokens
 googleMfaAuthAccounts=Google MFA Accounts
-u2fRegisteredDevices=U2F Devices
 webAuthnAccount=WebAuthn
 type_extensions.title=impersonations
 type_extensions.class=fas fa-user-friends
@@ -37,8 +36,6 @@ secretKey=Secret Key
 validationCode=Validation Code
 scratchCodes=Scratch Codes
 record=Record
-deprovision.class=fab fa-usb
-deprovision.title=u2f Devices
 identifier=Identifier
 json=JSON
 html.class=fas fa-at
diff --git 
a/client/am/console/src/main/resources/org/apache/syncope/client/console/authprofiles/AuthProfileDirectoryPanel_it.properties
 
b/client/am/console/src/main/resources/org/apache/syncope/client/console/authprofiles/AuthProfileDirectoryPanel_it.properties
index eeea47d4da..e9378093ce 100644
--- 
a/client/am/console/src/main/resources/org/apache/syncope/client/console/authprofiles/AuthProfileDirectoryPanel_it.properties
+++ 
b/client/am/console/src/main/resources/org/apache/syncope/client/console/authprofiles/AuthProfileDirectoryPanel_it.properties
@@ -21,7 +21,6 @@ owner=Proprietario
 impersonationAccounts=Impersonificazioni
 googleMfaAuthTokens=Token Google MFA
 googleMfaAuthAccounts=Account Google MFA
-u2fRegisteredDevices=Dispositivi U2F
 webAuthnAccount=WebAuthn
 type_extensions.title=impersonificazioni
 type_extensions.class=fas fa-user-friends
@@ -37,8 +36,6 @@ secretKey=Chiave Segreta
 validationCode=Codice Validazione
 scratchCodes=Codici Scratch
 record=Record
-deprovision.class=fab fa-usb
-deprovision.title=dispositivi u2f
 identifier=Identificativo
 json=JSON
 html.class=fas fa-at
diff --git 
a/client/am/console/src/main/resources/org/apache/syncope/client/console/authprofiles/AuthProfileDirectoryPanel_ja.properties
 
b/client/am/console/src/main/resources/org/apache/syncope/client/console/authprofiles/AuthProfileDirectoryPanel_ja.properties
index a7a4938210..ab9ac913c0 100644
--- 
a/client/am/console/src/main/resources/org/apache/syncope/client/console/authprofiles/AuthProfileDirectoryPanel_ja.properties
+++ 
b/client/am/console/src/main/resources/org/apache/syncope/client/console/authprofiles/AuthProfileDirectoryPanel_ja.properties
@@ -21,7 +21,6 @@ owner=Owner
 impersonationAccounts=Impersonations
 googleMfaAuthTokens=Google MFA Tokens
 googleMfaAuthAccounts=Google MFA Accounts
-u2fRegisteredDevices=U2F Devices
 webAuthnAccount=WebAuthn
 type_extensions.title=impersonations
 type_extensions.class=fas fa-user-friends
@@ -37,8 +36,6 @@ secretKey=Secret Key
 validationCode=Validation Code
 scratchCodes=Scratch Codes
 record=Record
-deprovision.class=fab fa-usb
-deprovision.title=u2f Devices
 identifier=Identifier
 json=JSON
 html.class=fas fa-at
diff --git 
a/client/am/console/src/main/resources/org/apache/syncope/client/console/authprofiles/AuthProfileDirectoryPanel_pt_BR.properties
 
b/client/am/console/src/main/resources/org/apache/syncope/client/console/authprofiles/AuthProfileDirectoryPanel_pt_BR.properties
index 623f5481b5..fb150cd581 100644
--- 
a/client/am/console/src/main/resources/org/apache/syncope/client/console/authprofiles/AuthProfileDirectoryPanel_pt_BR.properties
+++ 
b/client/am/console/src/main/resources/org/apache/syncope/client/console/authprofiles/AuthProfileDirectoryPanel_pt_BR.properties
@@ -21,7 +21,6 @@ owner=Owner
 impersonationAccounts=Impersonations
 googleMfaAuthTokens=Google MFA Tokens
 googleMfaAuthAccounts=Google MFA Accounts
-u2fRegisteredDevices=U2F Devices
 webAuthnAccount=WebAuthn
 type_extensions.title=impersonations
 type_extensions.class=fas fa-user-friends
@@ -37,8 +36,6 @@ secretKey=Secret Key
 validationCode=Validation Code
 scratchCodes=Scratch Codes
 record=Record
-deprovision.class=fab fa-usb
-deprovision.title=u2f Devices
 identifier=Identifier
 json=JSON
 html.class=fas fa-at
diff --git 
a/client/am/console/src/main/resources/org/apache/syncope/client/console/authprofiles/AuthProfileDirectoryPanel_ru.properties
 
b/client/am/console/src/main/resources/org/apache/syncope/client/console/authprofiles/AuthProfileDirectoryPanel_ru.properties
index e11f42941c..6cf76e3feb 100644
--- 
a/client/am/console/src/main/resources/org/apache/syncope/client/console/authprofiles/AuthProfileDirectoryPanel_ru.properties
+++ 
b/client/am/console/src/main/resources/org/apache/syncope/client/console/authprofiles/AuthProfileDirectoryPanel_ru.properties
@@ -22,7 +22,6 @@ owner=Owner
 impersonationAccounts=Impersonations
 googleMfaAuthTokens=Google MFA Tokens
 googleMfaAuthAccounts=Google MFA Accounts
-u2fRegisteredDevices=U2F Devices
 webAuthnAccount=WebAuthn
 type_extensions.title=impersonations
 type_extensions.class=fas fa-user-friends
@@ -38,8 +37,6 @@ secretKey=Secret Key
 validationCode=Validation Code
 scratchCodes=Scratch Codes
 record=Record
-deprovision.class=fab fa-usb
-deprovision.title=u2f Devices
 identifier=Identifier
 json=JSON
 html.class=fas fa-at
diff --git 
a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/BaseSession.java
 
b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/BaseSession.java
index 3187116192..621d729cc4 100644
--- 
a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/BaseSession.java
+++ 
b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/BaseSession.java
@@ -85,7 +85,7 @@ public interface BaseSession {
                 Locale.CANADA_FRENCH,
                 Locale.ITALIAN,
                 Locale.JAPANESE,
-                new Locale("pt", "BR"),
-                new Locale("ru"));
+                Locale.of("pt", "BR"),
+                Locale.of("ru"));
     }
 }
diff --git 
a/common/am/lib/src/main/java/org/apache/syncope/common/lib/auth/AuthModuleConf.java
 
b/common/am/lib/src/main/java/org/apache/syncope/common/lib/auth/AuthModuleConf.java
index 8bc5a4fa6d..4e0c7f0991 100644
--- 
a/common/am/lib/src/main/java/org/apache/syncope/common/lib/auth/AuthModuleConf.java
+++ 
b/common/am/lib/src/main/java/org/apache/syncope/common/lib/auth/AuthModuleConf.java
@@ -56,8 +56,6 @@ public interface AuthModuleConf extends BaseBean {
 
         Map<String, Object> map(AuthModuleTO authModule, DuoMfaAuthModuleConf 
conf);
 
-        Map<String, Object> map(AuthModuleTO authModule, U2FAuthModuleConf 
conf);
-
         Map<String, Object> map(AuthModuleTO authModule, 
SimpleMfaAuthModuleConf conf);
     }
 
diff --git 
a/common/am/lib/src/main/java/org/apache/syncope/common/lib/auth/U2FAuthModuleConf.java
 
b/common/am/lib/src/main/java/org/apache/syncope/common/lib/auth/U2FAuthModuleConf.java
deleted file mode 100644
index 1ba76264ac..0000000000
--- 
a/common/am/lib/src/main/java/org/apache/syncope/common/lib/auth/U2FAuthModuleConf.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.common.lib.auth;
-
-import java.util.Map;
-import org.apache.syncope.common.lib.to.AuthModuleTO;
-
-public class U2FAuthModuleConf implements MFAAuthModuleConf {
-
-    private static final long serialVersionUID = -1235771400318503131L;
-
-    private long expireRegistrations = 30;
-
-    private String expireRegistrationsTimeUnit = "SECONDS";
-
-    private long expireDevices = 30;
-
-    private String expireDevicesTimeUnit = "DAYS";
-
-    @Override
-    public String getFriendlyName() {
-        return "FIDO U2F";
-    }
-
-    public long getExpireRegistrations() {
-        return expireRegistrations;
-    }
-
-    public void setExpireRegistrations(final long expireRegistrations) {
-        this.expireRegistrations = expireRegistrations;
-    }
-
-    public String getExpireRegistrationsTimeUnit() {
-        return expireRegistrationsTimeUnit;
-    }
-
-    public void setExpireRegistrationsTimeUnit(final String 
expireRegistrationsTimeUnit) {
-        this.expireRegistrationsTimeUnit = expireRegistrationsTimeUnit;
-    }
-
-    public long getExpireDevices() {
-        return expireDevices;
-    }
-
-    public void setExpireDevices(final long expireDevices) {
-        this.expireDevices = expireDevices;
-    }
-
-    public String getExpireDevicesTimeUnit() {
-        return expireDevicesTimeUnit;
-    }
-
-    public void setExpireDevicesTimeUnit(final String expireDevicesTimeUnit) {
-        this.expireDevicesTimeUnit = expireDevicesTimeUnit;
-    }
-
-    @Override
-    public Map<String, Object> map(final AuthModuleTO authModule, final Mapper 
mapper) {
-        return mapper.map(authModule, this);
-    }
-}
diff --git 
a/common/am/lib/src/main/java/org/apache/syncope/common/lib/to/AuthProfileTO.java
 
b/common/am/lib/src/main/java/org/apache/syncope/common/lib/to/AuthProfileTO.java
index f06cde8cc8..c87f13545a 100644
--- 
a/common/am/lib/src/main/java/org/apache/syncope/common/lib/to/AuthProfileTO.java
+++ 
b/common/am/lib/src/main/java/org/apache/syncope/common/lib/to/AuthProfileTO.java
@@ -30,7 +30,6 @@ import org.apache.syncope.common.lib.wa.GoogleMfaAuthAccount;
 import org.apache.syncope.common.lib.wa.GoogleMfaAuthToken;
 import org.apache.syncope.common.lib.wa.ImpersonationAccount;
 import org.apache.syncope.common.lib.wa.MfaTrustedDevice;
-import org.apache.syncope.common.lib.wa.U2FDevice;
 import org.apache.syncope.common.lib.wa.WebAuthnDeviceCredential;
 
 public class AuthProfileTO implements EntityTO {
@@ -81,21 +80,6 @@ public class AuthProfileTO implements EntityTO {
             return this;
         }
 
-        public AuthProfileTO.Builder u2fRegisteredDevice(final U2FDevice 
device) {
-            instance.getU2FRegisteredDevices().add(device);
-            return this;
-        }
-
-        public AuthProfileTO.Builder u2fRegisteredDevices(final U2FDevice... 
devices) {
-            instance.getU2FRegisteredDevices().addAll(List.of(devices));
-            return this;
-        }
-
-        public AuthProfileTO.Builder u2fRegisteredDevices(final 
Collection<U2FDevice> devices) {
-            instance.getU2FRegisteredDevices().addAll(devices);
-            return this;
-        }
-
         public AuthProfileTO.Builder mfaTrustedDevice(final MfaTrustedDevice 
device) {
             instance.getMfaTrustedDevices().add(device);
             return this;
@@ -141,8 +125,6 @@ public class AuthProfileTO implements EntityTO {
 
     private final List<GoogleMfaAuthAccount> googleMfaAuthAccounts = new 
ArrayList<>();
 
-    private final List<U2FDevice> u2fRegisteredDevices = new ArrayList<>();
-
     private final List<MfaTrustedDevice> mfaTrustedDevices = new ArrayList<>();
 
     private final List<WebAuthnDeviceCredential> webAuthnDeviceCredentials = 
new ArrayList<>();
@@ -184,12 +166,6 @@ public class AuthProfileTO implements EntityTO {
         return googleMfaAuthAccounts;
     }
 
-    @JacksonXmlElementWrapper(localName = "u2fRegisteredDevices")
-    @JacksonXmlProperty(localName = "u2fRegisteredDevice")
-    public List<U2FDevice> getU2FRegisteredDevices() {
-        return u2fRegisteredDevices;
-    }
-
     @JacksonXmlElementWrapper(localName = "mfaTrustedDevices")
     @JacksonXmlProperty(localName = "mfaTrustedDevice")
     public List<MfaTrustedDevice> getMfaTrustedDevices() {
@@ -210,7 +186,6 @@ public class AuthProfileTO implements EntityTO {
                 append(impersonationAccounts).
                 append(googleMfaAuthTokens).
                 append(googleMfaAuthAccounts).
-                append(u2fRegisteredDevices).
                 append(mfaTrustedDevices).
                 append(webAuthnDeviceCredentials).
                 build();
@@ -234,7 +209,6 @@ public class AuthProfileTO implements EntityTO {
                 append(impersonationAccounts, other.impersonationAccounts).
                 append(googleMfaAuthTokens, other.googleMfaAuthTokens).
                 append(googleMfaAuthAccounts, other.googleMfaAuthAccounts).
-                append(u2fRegisteredDevices, other.u2fRegisteredDevices).
                 append(mfaTrustedDevices, other.mfaTrustedDevices).
                 append(webAuthnDeviceCredentials, 
other.webAuthnDeviceCredentials).
                 build();
diff --git 
a/common/am/lib/src/main/java/org/apache/syncope/common/lib/wa/U2FDevice.java 
b/common/am/lib/src/main/java/org/apache/syncope/common/lib/wa/U2FDevice.java
deleted file mode 100644
index 54abb47058..0000000000
--- 
a/common/am/lib/src/main/java/org/apache/syncope/common/lib/wa/U2FDevice.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.common.lib.wa;
-
-import java.time.OffsetDateTime;
-import org.apache.commons.lang3.builder.EqualsBuilder;
-import org.apache.commons.lang3.builder.HashCodeBuilder;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.syncope.common.lib.BaseBean;
-
-public class U2FDevice implements BaseBean {
-
-    private static final long serialVersionUID = 1185073386484048953L;
-
-    public static class Builder {
-
-        private final U2FDevice instance = new U2FDevice();
-
-        public U2FDevice.Builder issueDate(final OffsetDateTime issued) {
-            instance.setIssueDate(issued);
-            return this;
-        }
-
-        public U2FDevice.Builder record(final String record) {
-            instance.setRecord(record);
-            return this;
-        }
-
-        public U2FDevice.Builder id(final long id) {
-            instance.setId(id);
-            return this;
-        }
-
-        public U2FDevice build() {
-            return instance;
-        }
-    }
-
-    private long id;
-
-    private String record;
-
-    private OffsetDateTime issueDate;
-
-    public String getRecord() {
-        return record;
-    }
-
-    public void setRecord(final String record) {
-        this.record = record;
-    }
-
-    public long getId() {
-        return id;
-    }
-
-    public void setId(final long id) {
-        this.id = id;
-    }
-
-    public OffsetDateTime getIssueDate() {
-        return issueDate;
-    }
-
-    public void setIssueDate(final OffsetDateTime issueDate) {
-        this.issueDate = issueDate;
-    }
-
-    @Override
-    public int hashCode() {
-        return new HashCodeBuilder()
-                .append(record)
-                .append(id)
-                .append(issueDate)
-                .toHashCode();
-    }
-
-    @Override
-    public boolean equals(final Object obj) {
-        if (obj == null) {
-            return false;
-        }
-        if (obj == this) {
-            return true;
-        }
-        if (obj.getClass() != getClass()) {
-            return false;
-        }
-        U2FDevice other = (U2FDevice) obj;
-        return new EqualsBuilder()
-                .append(this.record, other.record)
-                .append(this.id, other.id)
-                .append(this.issueDate, other.issueDate)
-                .isEquals();
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this)
-                .append("record", record)
-                .append("id", id)
-                .append("issueDate", issueDate)
-                .toString();
-    }
-}
diff --git 
a/common/am/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/U2FDeviceQuery.java
 
b/common/am/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/U2FDeviceQuery.java
deleted file mode 100644
index 09d4316774..0000000000
--- 
a/common/am/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/U2FDeviceQuery.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.common.rest.api.beans;
-
-import io.swagger.v3.oas.annotations.Parameter;
-import io.swagger.v3.oas.annotations.enums.ParameterIn;
-import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.ws.rs.QueryParam;
-import java.time.OffsetDateTime;
-
-public class U2FDeviceQuery extends AbstractQuery {
-
-    private static final long serialVersionUID = -7381828286332101171L;
-
-    public static class Builder extends AbstractQuery.Builder<U2FDeviceQuery, 
U2FDeviceQuery.Builder> {
-
-        @Override
-        protected U2FDeviceQuery newInstance() {
-            return new U2FDeviceQuery();
-        }
-
-        public U2FDeviceQuery.Builder owner(final String owner) {
-            getInstance().setOwner(owner);
-            return this;
-        }
-
-        public U2FDeviceQuery.Builder id(final Long id) {
-            getInstance().setId(id);
-            return this;
-        }
-
-        public U2FDeviceQuery.Builder expirationDate(final OffsetDateTime 
date) {
-            getInstance().setExpirationDate(date);
-            return this;
-        }
-    }
-
-    private Long id;
-
-    private OffsetDateTime expirationDate;
-
-    private String owner;
-
-    @Parameter(name = "id", in = ParameterIn.QUERY, schema =
-            @Schema(implementation = Long.class))
-    public Long getId() {
-        return id;
-    }
-
-    @QueryParam("id")
-    public void setId(final Long id) {
-        this.id = id;
-    }
-
-    @Parameter(name = "expirationDate", in = ParameterIn.QUERY, schema =
-            @Schema(implementation = OffsetDateTime.class))
-    public OffsetDateTime getExpirationDate() {
-        return expirationDate;
-    }
-
-    @QueryParam("expirationDate")
-    public void setExpirationDate(final OffsetDateTime expirationDate) {
-        this.expirationDate = expirationDate;
-    }
-
-    @Parameter(name = "owner", in = ParameterIn.QUERY, schema =
-            @Schema(implementation = String.class))
-    public String getOwner() {
-        return owner;
-    }
-
-    @QueryParam("owner")
-    public void setOwner(final String owner) {
-        this.owner = owner;
-    }
-}
diff --git 
a/common/am/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/wa/U2FRegistrationService.java
 
b/common/am/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/wa/U2FRegistrationService.java
deleted file mode 100644
index b2cf366982..0000000000
--- 
a/common/am/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/wa/U2FRegistrationService.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.common.rest.api.service.wa;
-
-import io.swagger.v3.oas.annotations.security.SecurityRequirement;
-import io.swagger.v3.oas.annotations.security.SecurityRequirements;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import jakarta.validation.constraints.NotNull;
-import jakarta.ws.rs.BeanParam;
-import jakarta.ws.rs.Consumes;
-import jakarta.ws.rs.DELETE;
-import jakarta.ws.rs.GET;
-import jakarta.ws.rs.POST;
-import jakarta.ws.rs.Path;
-import jakarta.ws.rs.PathParam;
-import jakarta.ws.rs.Produces;
-import jakarta.ws.rs.core.MediaType;
-import org.apache.syncope.common.lib.to.PagedResult;
-import org.apache.syncope.common.lib.wa.U2FDevice;
-import org.apache.syncope.common.rest.api.RESTHeaders;
-import org.apache.syncope.common.rest.api.beans.U2FDeviceQuery;
-import org.apache.syncope.common.rest.api.service.JAXRSService;
-
-@Tag(name = "WA")
-@SecurityRequirements({
-    @SecurityRequirement(name = "BasicAuthentication"),
-    @SecurityRequirement(name = "Bearer") })
-@Path("wa/u2f")
-public interface U2FRegistrationService extends JAXRSService {
-
-    @DELETE
-    @Consumes({ MediaType.APPLICATION_JSON, RESTHeaders.APPLICATION_YAML, 
MediaType.APPLICATION_XML })
-    @Produces({ MediaType.APPLICATION_JSON, RESTHeaders.APPLICATION_YAML, 
MediaType.APPLICATION_XML })
-    void delete(@BeanParam U2FDeviceQuery query);
-
-    @POST
-    @Path("{owner}")
-    @Consumes({ MediaType.APPLICATION_JSON, RESTHeaders.APPLICATION_YAML, 
MediaType.APPLICATION_XML })
-    @Produces({ MediaType.APPLICATION_JSON, RESTHeaders.APPLICATION_YAML, 
MediaType.APPLICATION_XML })
-    void create(@NotNull @PathParam("owner") String owner, @NotNull U2FDevice 
device);
-
-    @GET
-    @Consumes({ MediaType.APPLICATION_JSON, RESTHeaders.APPLICATION_YAML, 
MediaType.APPLICATION_XML })
-    @Produces({ MediaType.APPLICATION_JSON, RESTHeaders.APPLICATION_YAML, 
MediaType.APPLICATION_XML })
-    PagedResult<U2FDevice> search(@BeanParam U2FDeviceQuery query);
-}
diff --git 
a/core/am/logic/src/main/java/org/apache/syncope/core/logic/AMLogicContext.java 
b/core/am/logic/src/main/java/org/apache/syncope/core/logic/AMLogicContext.java
index 8a365cc522..8497727db2 100644
--- 
a/core/am/logic/src/main/java/org/apache/syncope/core/logic/AMLogicContext.java
+++ 
b/core/am/logic/src/main/java/org/apache/syncope/core/logic/AMLogicContext.java
@@ -24,7 +24,6 @@ import 
org.apache.syncope.core.logic.wa.GoogleMfaAuthAccountLogic;
 import org.apache.syncope.core.logic.wa.GoogleMfaAuthTokenLogic;
 import org.apache.syncope.core.logic.wa.ImpersonationLogic;
 import org.apache.syncope.core.logic.wa.MfaTrusStorageLogic;
-import org.apache.syncope.core.logic.wa.U2FRegistrationLogic;
 import org.apache.syncope.core.logic.wa.WAClientAppLogic;
 import org.apache.syncope.core.logic.wa.WAConfigLogic;
 import org.apache.syncope.core.logic.wa.WebAuthnRegistrationLogic;
@@ -180,16 +179,6 @@ public class AMLogicContext {
         return new ImpersonationLogic(entityFactory, authProfileDAO, 
authProfileDataBinder);
     }
 
-    @ConditionalOnMissingBean
-    @Bean
-    public U2FRegistrationLogic u2fRegistrationLogic(
-            final AuthProfileDAO authProfileDAO,
-            final AuthProfileDataBinder authProfileDataBinder,
-            final EntityFactory entityFactory) {
-
-        return new U2FRegistrationLogic(entityFactory, authProfileDAO, 
authProfileDataBinder);
-    }
-
     @ConditionalOnMissingBean
     @Bean
     public MfaTrusStorageLogic mfaTrusStorageLogic(
diff --git 
a/core/am/logic/src/main/java/org/apache/syncope/core/logic/wa/U2FRegistrationLogic.java
 
b/core/am/logic/src/main/java/org/apache/syncope/core/logic/wa/U2FRegistrationLogic.java
deleted file mode 100644
index 31f7828832..0000000000
--- 
a/core/am/logic/src/main/java/org/apache/syncope/core/logic/wa/U2FRegistrationLogic.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.core.logic.wa;
-
-import java.time.OffsetDateTime;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Objects;
-import java.util.stream.Collectors;
-import org.apache.commons.lang3.builder.CompareToBuilder;
-import org.apache.commons.lang3.builder.EqualsBuilder;
-import org.apache.commons.lang3.tuple.Pair;
-import org.apache.syncope.common.lib.types.IdRepoEntitlement;
-import org.apache.syncope.common.lib.wa.U2FDevice;
-import org.apache.syncope.core.logic.AbstractAuthProfileLogic;
-import org.apache.syncope.core.persistence.api.dao.AuthProfileDAO;
-import org.apache.syncope.core.persistence.api.dao.search.OrderByClause;
-import org.apache.syncope.core.persistence.api.entity.EntityFactory;
-import org.apache.syncope.core.persistence.api.entity.am.AuthProfile;
-import org.apache.syncope.core.provisioning.api.data.AuthProfileDataBinder;
-import org.springframework.security.access.prepost.PreAuthorize;
-
-public class U2FRegistrationLogic extends AbstractAuthProfileLogic {
-
-    protected final EntityFactory entityFactory;
-
-    public U2FRegistrationLogic(
-            final EntityFactory entityFactory,
-            final AuthProfileDAO authProfileDAO,
-            final AuthProfileDataBinder binder) {
-
-        super(authProfileDAO, binder);
-        this.entityFactory = entityFactory;
-    }
-
-    @PreAuthorize("hasRole('" + IdRepoEntitlement.ANONYMOUS + "')")
-    public void create(final String owner, final U2FDevice device) {
-        AuthProfile profile = authProfileDAO.findByOwner(owner).orElseGet(() 
-> {
-            AuthProfile authProfile = 
entityFactory.newEntity(AuthProfile.class);
-            authProfile.setOwner(owner);
-            return authProfile;
-        });
-
-        List<U2FDevice> devices = profile.getU2FRegisteredDevices();
-        devices.add(device);
-        profile.setU2FRegisteredDevices(devices);
-        authProfileDAO.save(profile);
-    }
-
-    @PreAuthorize("hasRole('" + IdRepoEntitlement.ANONYMOUS + "')")
-    public void delete(final Long id, final OffsetDateTime expirationDate) {
-        List<AuthProfile> profiles = authProfileDAO.findAll(-1, -1);
-        profiles.forEach(profile -> {
-            List<U2FDevice> devices = profile.getU2FRegisteredDevices();
-            if (devices != null) {
-                if (id != null) {
-                    devices.removeIf(device -> device.getId() == id);
-                } else if (expirationDate != null) {
-                    devices.removeIf(device -> 
device.getIssueDate().compareTo(expirationDate) < 0);
-                } else {
-                    devices = List.of();
-                }
-                profile.setU2FRegisteredDevices(devices);
-                authProfileDAO.save(profile);
-            }
-        });
-    }
-
-    @PreAuthorize("hasRole('" + IdRepoEntitlement.ANONYMOUS + "')")
-    public Pair<Integer, List<U2FDevice>> search(
-            final Integer page,
-            final Integer itemsPerPage,
-            final Long id,
-            final OffsetDateTime expirationDate,
-            final List<OrderByClause> orderByClauses) {
-
-        List<Comparator<U2FDevice>> comparatorList = orderByClauses.
-                stream().
-                map(orderByClause -> {
-                    Comparator<U2FDevice> comparator = null;
-                    if (orderByClause.getField().equals("id")) {
-                        comparator = (o1, o2) -> new CompareToBuilder().
-                                append(o1.getId(), o2.getId()).toComparison();
-                    }
-                    if (orderByClause.getField().equals("issueDate")) {
-                        comparator = (o1, o2) -> new CompareToBuilder().
-                                append(o1.getIssueDate(), 
o2.getIssueDate()).toComparison();
-                    }
-                    if (orderByClause.getField().equals("record")) {
-                        comparator = (o1, o2) -> new CompareToBuilder().
-                                append(o1.getRecord(), 
o2.getRecord()).toComparison();
-                    }
-                    if (comparator != null) {
-                        if (orderByClause.getDirection() == 
OrderByClause.Direction.DESC) {
-                            return comparator.reversed();
-                        }
-                        return comparator;
-                    }
-                    return null;
-                }).
-                filter(Objects::nonNull).
-                collect(Collectors.toList());
-
-        List<U2FDevice> devices = authProfileDAO.findAll(-1, -1).
-                stream().
-                map(AuthProfile::getU2FRegisteredDevices).
-                filter(Objects::nonNull).
-                flatMap(List::stream).
-                filter(device -> {
-                    EqualsBuilder builder = new EqualsBuilder();
-                    if (id != null) {
-                        builder.append(id, (Long) device.getId());
-                    }
-                    if (expirationDate != null) {
-                        
builder.appendSuper(device.getIssueDate().compareTo(expirationDate) >= 0);
-                    }
-                    return builder.build();
-                }).
-                filter(Objects::nonNull).
-                collect(Collectors.toList());
-
-        List<U2FDevice> result = devices.stream().
-                limit(itemsPerPage).
-                skip(itemsPerPage * (page <= 0 ? 0L : page.longValue() - 1L)).
-                sorted((o1, o2) -> {
-                    int compare;
-                    for (Comparator<U2FDevice> comparator : comparatorList) {
-                        compare = comparator.compare(o1, o2);
-                        if (compare != 0) {
-                            return compare;
-                        }
-                    }
-                    return 0;
-                })
-                .collect(Collectors.toList());
-        return Pair.of(devices.size(), result);
-    }
-}
diff --git 
a/core/am/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/AMRESTCXFContext.java
 
b/core/am/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/AMRESTCXFContext.java
index 81942ea9ec..bcae28de55 100644
--- 
a/core/am/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/AMRESTCXFContext.java
+++ 
b/core/am/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/AMRESTCXFContext.java
@@ -30,7 +30,6 @@ import 
org.apache.syncope.common.rest.api.service.wa.GoogleMfaAuthAccountService
 import org.apache.syncope.common.rest.api.service.wa.GoogleMfaAuthTokenService;
 import org.apache.syncope.common.rest.api.service.wa.ImpersonationService;
 import org.apache.syncope.common.rest.api.service.wa.MfaTrustStorageService;
-import org.apache.syncope.common.rest.api.service.wa.U2FRegistrationService;
 import org.apache.syncope.common.rest.api.service.wa.WAClientAppService;
 import org.apache.syncope.common.rest.api.service.wa.WAConfigService;
 import 
org.apache.syncope.common.rest.api.service.wa.WebAuthnRegistrationService;
@@ -46,7 +45,6 @@ import 
org.apache.syncope.core.logic.wa.GoogleMfaAuthAccountLogic;
 import org.apache.syncope.core.logic.wa.GoogleMfaAuthTokenLogic;
 import org.apache.syncope.core.logic.wa.ImpersonationLogic;
 import org.apache.syncope.core.logic.wa.MfaTrusStorageLogic;
-import org.apache.syncope.core.logic.wa.U2FRegistrationLogic;
 import org.apache.syncope.core.logic.wa.WAClientAppLogic;
 import org.apache.syncope.core.logic.wa.WAConfigLogic;
 import org.apache.syncope.core.logic.wa.WebAuthnRegistrationLogic;
@@ -62,7 +60,6 @@ import 
org.apache.syncope.core.rest.cxf.service.wa.GoogleMfaAuthAccountServiceIm
 import 
org.apache.syncope.core.rest.cxf.service.wa.GoogleMfaAuthTokenServiceImpl;
 import org.apache.syncope.core.rest.cxf.service.wa.ImpersonationServiceImpl;
 import org.apache.syncope.core.rest.cxf.service.wa.MfaTrustStorageServiceImpl;
-import org.apache.syncope.core.rest.cxf.service.wa.U2FRegistrationServiceImpl;
 import org.apache.syncope.core.rest.cxf.service.wa.WAClientAppServiceImpl;
 import org.apache.syncope.core.rest.cxf.service.wa.WAConfigServiceImpl;
 import 
org.apache.syncope.core.rest.cxf.service.wa.WebAuthnRegistrationServiceImpl;
@@ -143,12 +140,6 @@ public class AMRESTCXFContext {
         return new SRARouteServiceImpl(sraRouteLogic);
     }
 
-    @ConditionalOnMissingBean
-    @Bean
-    public U2FRegistrationService u2fRegistrationService(final 
U2FRegistrationLogic u2fRegistrationLogic) {
-        return new U2FRegistrationServiceImpl(u2fRegistrationLogic);
-    }
-
     @ConditionalOnMissingBean
     @Bean
     public MfaTrustStorageService mfaTrustStorageService(final 
MfaTrusStorageLogic mfaTrusStorageLogic) {
diff --git 
a/core/am/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/wa/U2FRegistrationServiceImpl.java
 
b/core/am/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/wa/U2FRegistrationServiceImpl.java
deleted file mode 100644
index 7e836e085b..0000000000
--- 
a/core/am/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/wa/U2FRegistrationServiceImpl.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.core.rest.cxf.service.wa;
-
-import java.util.List;
-import org.apache.commons.lang3.tuple.Pair;
-import org.apache.syncope.common.lib.to.PagedResult;
-import org.apache.syncope.common.lib.wa.U2FDevice;
-import org.apache.syncope.common.rest.api.beans.U2FDeviceQuery;
-import org.apache.syncope.common.rest.api.service.wa.U2FRegistrationService;
-import org.apache.syncope.core.logic.wa.U2FRegistrationLogic;
-import org.apache.syncope.core.rest.cxf.service.AbstractService;
-import org.springframework.stereotype.Service;
-
-@Service
-public class U2FRegistrationServiceImpl extends AbstractService implements 
U2FRegistrationService {
-
-    protected final U2FRegistrationLogic logic;
-
-    public U2FRegistrationServiceImpl(final U2FRegistrationLogic logic) {
-        this.logic = logic;
-    }
-
-    @Override
-    public void delete(final U2FDeviceQuery query) {
-        logic.delete(query.getId(), query.getExpirationDate());
-    }
-
-    @Override
-    public void create(final String owner, final U2FDevice device) {
-        logic.create(owner, device);
-    }
-
-    @Override
-    public PagedResult<U2FDevice> search(final U2FDeviceQuery query) {
-        Pair<Integer, List<U2FDevice>> result = logic.search(
-                query.getPage(),
-                query.getSize(),
-                query.getId(),
-                query.getExpirationDate(),
-                getOrderByClauses(query.getOrderBy()));
-        return buildPagedResult(result.getRight(), query.getPage(), 
query.getSize(), result.getLeft());
-    }
-}
diff --git 
a/core/idm/logic/src/main/java/org/apache/syncope/core/logic/ConnectorLogic.java
 
b/core/idm/logic/src/main/java/org/apache/syncope/core/logic/ConnectorLogic.java
index 415b404401..955b9915d4 100644
--- 
a/core/idm/logic/src/main/java/org/apache/syncope/core/logic/ConnectorLogic.java
+++ 
b/core/idm/logic/src/main/java/org/apache/syncope/core/logic/ConnectorLogic.java
@@ -154,7 +154,7 @@ public class ConnectorLogic extends 
AbstractTransactionalLogic<ConnInstanceTO> {
     @PreAuthorize("hasRole('" + IdMEntitlement.CONNECTOR_LIST + "')")
     @Transactional(readOnly = true)
     public List<ConnInstanceTO> list(final String lang) {
-        CurrentLocale.set(StringUtils.isBlank(lang) ? Locale.ENGLISH : new 
Locale(lang));
+        CurrentLocale.set(StringUtils.isBlank(lang) ? Locale.ENGLISH : 
Locale.of(lang));
 
         return 
connInstanceDAO.findAll().stream().map(binder::getConnInstanceTO).collect(Collectors.toList());
     }
@@ -162,7 +162,7 @@ public class ConnectorLogic extends 
AbstractTransactionalLogic<ConnInstanceTO> {
     @PreAuthorize("hasRole('" + IdMEntitlement.CONNECTOR_READ + "')")
     @Transactional(readOnly = true)
     public ConnInstanceTO read(final String key, final String lang) {
-        CurrentLocale.set(StringUtils.isBlank(lang) ? Locale.ENGLISH : new 
Locale(lang));
+        CurrentLocale.set(StringUtils.isBlank(lang) ? Locale.ENGLISH : 
Locale.of(lang));
 
         ConnInstance connInstance = connInstanceDAO.authFind(key);
         if (connInstance == null) {
@@ -178,7 +178,7 @@ public class ConnectorLogic extends 
AbstractTransactionalLogic<ConnInstanceTO> {
         if (StringUtils.isBlank(lang)) {
             CurrentLocale.set(Locale.ENGLISH);
         } else {
-            CurrentLocale.set(new Locale(lang));
+            CurrentLocale.set(Locale.of(lang));
         }
 
         List<ConnIdBundle> connectorBundleTOs = new ArrayList<>();
@@ -254,7 +254,7 @@ public class ConnectorLogic extends 
AbstractTransactionalLogic<ConnInstanceTO> {
     @PreAuthorize("hasRole('" + IdMEntitlement.CONNECTOR_READ + "')")
     @Transactional(readOnly = true)
     public ConnInstanceTO readByResource(final String resourceName, final 
String lang) {
-        CurrentLocale.set(StringUtils.isBlank(lang) ? Locale.ENGLISH : new 
Locale(lang));
+        CurrentLocale.set(StringUtils.isBlank(lang) ? Locale.ENGLISH : 
Locale.of(lang));
 
         ExternalResource resource = 
Optional.ofNullable(resourceDAO.find(resourceName)).
                 orElseThrow(() -> new NotFoundException("Resource '" + 
resourceName + '\''));
diff --git 
a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/am/AuthProfile.java
 
b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/am/AuthProfile.java
index 2bf4554de6..bd92221511 100644
--- 
a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/am/AuthProfile.java
+++ 
b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/am/AuthProfile.java
@@ -23,7 +23,6 @@ import org.apache.syncope.common.lib.wa.GoogleMfaAuthAccount;
 import org.apache.syncope.common.lib.wa.GoogleMfaAuthToken;
 import org.apache.syncope.common.lib.wa.ImpersonationAccount;
 import org.apache.syncope.common.lib.wa.MfaTrustedDevice;
-import org.apache.syncope.common.lib.wa.U2FDevice;
 import org.apache.syncope.common.lib.wa.WebAuthnDeviceCredential;
 import org.apache.syncope.core.persistence.api.entity.Entity;
 
@@ -37,10 +36,6 @@ public interface AuthProfile extends Entity {
 
     void setGoogleMfaAuthTokens(List<GoogleMfaAuthToken> tokens);
 
-    List<U2FDevice> getU2FRegisteredDevices();
-
-    void setU2FRegisteredDevices(List<U2FDevice> records);
-
     List<GoogleMfaAuthAccount> getGoogleMfaAuthAccounts();
 
     void setGoogleMfaAuthAccounts(List<GoogleMfaAuthAccount> accounts);
diff --git 
a/core/persistence-jpa-json/src/test/resources/domains/MasterContent.xml 
b/core/persistence-jpa-json/src/test/resources/domains/MasterContent.xml
index 3c123e6b98..95ccc4b951 100644
--- a/core/persistence-jpa-json/src/test/resources/domains/MasterContent.xml
+++ b/core/persistence-jpa-json/src/test/resources/domains/MasterContent.xml
@@ -85,8 +85,6 @@ under the License.
   <AuthModule id="DefaultSyncopeAuthModule" authModuleState="ACTIVE"
               description="Syncope auth module" 
jsonConf='{"_class":"org.apache.syncope.common.lib.auth.SyncopeAuthModuleConf","domain":"Master"}'
               
items='[{"intAttrName":"syncopeUserAttr_surname","extAttrName":"family_name","connObjectKey":false,"password":false,"mandatoryCondition":"false","purpose":"NONE","propagationJEXLTransformer":null,"pullJEXLTransformer":null,"transformers":[]},{"intAttrName":"syncopeUserAttr_fullname","extAttrName":"name","connObjectKey":false,"password":false,"mandatoryCondition":"false","purpose":"NONE","propagationJEXLTransformer":null,"pullJEXLTransformer":null,"transformers":[]},{"intAtt
 [...]
-  <AuthModule id="DefaultU2FAuthModule" authModuleState="ACTIVE"
-              description="U2F auth module" 
jsonConf='{"_class":"org.apache.syncope.common.lib.auth.U2FAuthModuleConf","expireDevices":40}'/>
   <AuthModule id="DefaultOAuth20AuthModule" description="OAuth20 auth module" 
authModuleOrder="0" 
               
jsonConf='{"_class":"org.apache.syncope.common.lib.auth.OAuth20AuthModuleConf","clientName":"oauth20","clientId":"OAUTH20","clientSecret":"secret","enabled":true,"customParams":{},"tokenUrl":"https://localhost/oauth2/token","responseType":"code","scope":"oauth
 
test","userIdAttribute":"username","authUrl":"https://localhost/oauth2/auth","profileUrl":"https://localhost/oauth2/profile","withState":false,"profileVerb":"POST"}'
 authModuleState="ACTIVE"/>
 
diff --git 
a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/am/JPAAuthProfile.java
 
b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/am/JPAAuthProfile.java
index 5e15eab2c2..303436b9c3 100644
--- 
a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/am/JPAAuthProfile.java
+++ 
b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/am/JPAAuthProfile.java
@@ -31,7 +31,6 @@ import org.apache.syncope.common.lib.wa.GoogleMfaAuthAccount;
 import org.apache.syncope.common.lib.wa.GoogleMfaAuthToken;
 import org.apache.syncope.common.lib.wa.ImpersonationAccount;
 import org.apache.syncope.common.lib.wa.MfaTrustedDevice;
-import org.apache.syncope.common.lib.wa.U2FDevice;
 import org.apache.syncope.common.lib.wa.WebAuthnDeviceCredential;
 import org.apache.syncope.core.persistence.api.entity.am.AuthProfile;
 import 
org.apache.syncope.core.persistence.jpa.entity.AbstractGeneratedKeyEntity;
@@ -54,9 +53,6 @@ public class JPAAuthProfile extends 
AbstractGeneratedKeyEntity implements AuthPr
             new TypeReference<List<GoogleMfaAuthAccount>>() {
     };
 
-    protected static final TypeReference<List<U2FDevice>> U2F_TYPEREF = new 
TypeReference<List<U2FDevice>>() {
-    };
-
     protected static final TypeReference<List<MfaTrustedDevice>> 
MFA_TRUSTED_DEVICE_TYPEREF =
             new TypeReference<List<MfaTrustedDevice>>() {
     };
@@ -81,9 +77,6 @@ public class JPAAuthProfile extends 
AbstractGeneratedKeyEntity implements AuthPr
     @Lob
     private String googleMfaAuthTokens;
 
-    @Lob
-    private String u2fRegisteredDevices;
-
     @Lob
     private String mfaTrustedDevices;
 
@@ -122,17 +115,6 @@ public class JPAAuthProfile extends 
AbstractGeneratedKeyEntity implements AuthPr
         googleMfaAuthAccounts = POJOHelper.serialize(accounts);
     }
 
-    @Override
-    public List<U2FDevice> getU2FRegisteredDevices() {
-        return Optional.ofNullable(u2fRegisteredDevices).
-                map(v -> POJOHelper.deserialize(v, U2F_TYPEREF)).orElseGet(() 
-> new ArrayList<>(0));
-    }
-
-    @Override
-    public void setU2FRegisteredDevices(final List<U2FDevice> devices) {
-        u2fRegisteredDevices = POJOHelper.serialize(devices);
-    }
-
     @Override
     public List<MfaTrustedDevice> getMfaTrustedDevices() {
         return Optional.ofNullable(mfaTrustedDevices).
diff --git 
a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AuthModuleTest.java
 
b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AuthModuleTest.java
index 08dda7b0d4..b9713572b1 100644
--- 
a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AuthModuleTest.java
+++ 
b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AuthModuleTest.java
@@ -38,7 +38,6 @@ import 
org.apache.syncope.common.lib.auth.SAML2IdPAuthModuleConf;
 import org.apache.syncope.common.lib.auth.SimpleMfaAuthModuleConf;
 import org.apache.syncope.common.lib.auth.StaticAuthModuleConf;
 import org.apache.syncope.common.lib.auth.SyncopeAuthModuleConf;
-import org.apache.syncope.common.lib.auth.U2FAuthModuleConf;
 import org.apache.syncope.common.lib.to.Item;
 import org.apache.syncope.common.lib.types.AuthModuleState;
 import org.apache.syncope.core.persistence.api.dao.AuthModuleDAO;
@@ -103,10 +102,6 @@ public class AuthModuleTest extends AbstractTest {
         authModule = authModuleDAO.find("DefaultSyncopeAuthModule");
         assertNotNull(authModule);
         assertTrue(authModule.getConf() instanceof SyncopeAuthModuleConf);
-
-        authModule = authModuleDAO.find("DefaultU2FAuthModule");
-        assertNotNull(authModule);
-        assertTrue(authModule.getConf() instanceof U2FAuthModuleConf);
     }
 
     @Test
@@ -139,9 +134,6 @@ public class AuthModuleTest extends AbstractTest {
         assertTrue(authModules.stream().anyMatch(
                 authModule -> isSpecificConf(authModule.getConf(), 
SyncopeAuthModuleConf.class)
                 && authModule.getKey().equals("DefaultSyncopeAuthModule")));
-        assertTrue(authModules.stream().anyMatch(
-                authModule -> isSpecificConf(authModule.getConf(), 
U2FAuthModuleConf.class)
-                && authModule.getKey().equals("DefaultU2FAuthModule")));
     }
 
     @Test
@@ -245,14 +237,6 @@ public class AuthModuleTest extends AbstractTest {
         saveAuthModule("SimpleMfaAuthModuleConf", conf);
     }
 
-    @Test
-    public void saveWithU2FModule() {
-        U2FAuthModuleConf conf = new U2FAuthModuleConf();
-        conf.setExpireDevices(50);
-
-        saveAuthModule("U2FAuthModuleTest", conf);
-    }
-
     @Test
     public void updateWithLDAPModule() {
         AuthModule module = authModuleDAO.find("DefaultLDAPAuthModule");
@@ -386,22 +370,6 @@ public class AuthModuleTest extends AbstractTest {
         assertEquals(2, 
StaticAuthModuleConf.class.cast(found.getConf()).getUsers().size());
     }
 
-    @Test
-    public void updateWithU2fModule() {
-        AuthModule module = authModuleDAO.find("DefaultU2FAuthModule");
-        assertNotNull(module);
-        AuthModuleConf conf = module.getConf();
-        U2FAuthModuleConf.class.cast(conf).setExpireDevices(24);
-        module.setConf(conf);
-
-        module = authModuleDAO.save(module);
-        assertNotNull(module);
-        assertNotNull(module.getKey());
-        AuthModule found = authModuleDAO.find(module.getKey());
-        assertNotNull(found);
-        assertEquals(24, 
U2FAuthModuleConf.class.cast(found.getConf()).getExpireDevices());
-    }
-
     @Test
     public void updateWithSyncopeModule() {
         AuthModule module = authModuleDAO.find("DefaultSyncopeAuthModule");
diff --git 
a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AuthProfileTest.java
 
b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AuthProfileTest.java
index bc54c790bd..0fd0d1eeae 100644
--- 
a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AuthProfileTest.java
+++ 
b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AuthProfileTest.java
@@ -31,7 +31,6 @@ import java.util.stream.IntStream;
 import org.apache.syncope.common.lib.wa.GoogleMfaAuthAccount;
 import org.apache.syncope.common.lib.wa.GoogleMfaAuthToken;
 import org.apache.syncope.common.lib.wa.ImpersonationAccount;
-import org.apache.syncope.common.lib.wa.U2FDevice;
 import org.apache.syncope.common.lib.wa.WebAuthnDeviceCredential;
 import org.apache.syncope.core.persistence.api.dao.AuthProfileDAO;
 import org.apache.syncope.core.persistence.api.entity.am.AuthProfile;
@@ -76,27 +75,6 @@ public class AuthProfileTest extends AbstractTest {
         assertFalse(authProfileDAO.findByOwner(id).isPresent());
     }
 
-    @Test
-    public void u2fRegisteredDevice() {
-        String id = SecureRandomUtils.generateRandomUUID().toString();
-        createAuthProfileWithU2FDevice(id, "{ 'record': 1 }");
-
-        Optional<AuthProfile> result = authProfileDAO.findByOwner(id);
-        assertTrue(result.isPresent());
-
-        assertFalse(authProfileDAO.findAll(-1, -1).isEmpty());
-
-        AuthProfile authProfile = result.get();
-        result = 
Optional.ofNullable(authProfileDAO.find(authProfile.getKey()));
-        assertTrue(result.isPresent());
-
-        authProfile.setOwner("SyncopeCreate-NewU2F");
-        authProfile.setU2FRegisteredDevices(List.of());
-        authProfileDAO.save(authProfile);
-
-        assertFalse(authProfileDAO.findByOwner(id).isPresent());
-    }
-
     @Test
     public void webAuthnRegisteredDevice() {
         String id = SecureRandomUtils.generateRandomUUID().toString();
@@ -127,7 +105,7 @@ public class AuthProfileTest extends AbstractTest {
         result = 
Optional.ofNullable(authProfileDAO.find(authProfile.getKey()));
         assertTrue(result.isPresent());
 
-        authProfile.setOwner("SyncopeCreate-NewU2F");
+        authProfile.setOwner("newowner");
         authProfile.setWebAuthnDeviceCredentials(List.of());
         authProfileDAO.save(authProfile);
 
@@ -190,14 +168,6 @@ public class AuthProfileTest extends AbstractTest {
         return authProfileDAO.save(profile);
     }
 
-    private AuthProfile createAuthProfileWithU2FDevice(final String owner, 
final String record) {
-        AuthProfile profile = entityFactory.newEntity(AuthProfile.class);
-        profile.setOwner(owner);
-        U2FDevice device = new 
U2FDevice.Builder().issueDate(OffsetDateTime.now()).record(record).build();
-        profile.setU2FRegisteredDevices(List.of(device));
-        return authProfileDAO.save(profile);
-    }
-
     private AuthProfile createAuthProfileWithWebAuthnDevice(
             final String owner,
             final List<WebAuthnDeviceCredential> credentials) {
diff --git a/core/persistence-jpa/src/test/resources/domains/MasterContent.xml 
b/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
index 2c0c3d2b33..f0171b5daa 100644
--- a/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
+++ b/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
@@ -85,8 +85,6 @@ under the License.
   <AuthModule id="DefaultSyncopeAuthModule" authModuleState="ACTIVE"
               description="Syncope auth module" 
jsonConf='{"_class":"org.apache.syncope.common.lib.auth.SyncopeAuthModuleConf","domain":"Master"}'
               
items='[{"intAttrName":"syncopeUserAttr_surname","extAttrName":"family_name","connObjectKey":false,"password":false,"mandatoryCondition":"false","purpose":"NONE","propagationJEXLTransformer":null,"pullJEXLTransformer":null,"transformers":[]},{"intAttrName":"syncopeUserAttr_fullname","extAttrName":"name","connObjectKey":false,"password":false,"mandatoryCondition":"false","purpose":"NONE","propagationJEXLTransformer":null,"pullJEXLTransformer":null,"transformers":[]},{"intAtt
 [...]
-  <AuthModule id="DefaultU2FAuthModule" authModuleState="ACTIVE"
-              description="U2F auth module" 
jsonConf='{"_class":"org.apache.syncope.common.lib.auth.U2FAuthModuleConf","expireDevices":40}'/>
   <AuthModule id="DefaultOAuth20AuthModule" description="OAuth20 auth module" 
authModuleOrder="0"
               
jsonConf='{"_class":"org.apache.syncope.common.lib.auth.OAuth20AuthModuleConf","clientName":"oauth20","clientId":"OAUTH20","clientSecret":"secret","enabled":true,"customParams":{},"tokenUrl":"https://localhost/oauth2/token","responseType":"code","scope":"oauth
 
test","userIdAttribute":"username","authUrl":"https://localhost/oauth2/auth","profileUrl":"https://localhost/oauth2/profile","withState":false,"profileVerb":"POST"}'
 authModuleState="ACTIVE"/>
 
diff --git 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AuthProfileDataBinderImpl.java
 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AuthProfileDataBinderImpl.java
index 584a020931..615e1b4a9e 100644
--- 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AuthProfileDataBinderImpl.java
+++ 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AuthProfileDataBinderImpl.java
@@ -39,7 +39,6 @@ public class AuthProfileDataBinderImpl implements 
AuthProfileDataBinder {
         
authProfileTO.getImpersonationAccounts().addAll(authProfile.getImpersonationAccounts());
         
authProfileTO.getGoogleMfaAuthTokens().addAll(authProfile.getGoogleMfaAuthTokens());
         
authProfileTO.getGoogleMfaAuthAccounts().addAll(authProfile.getGoogleMfaAuthAccounts());
-        
authProfileTO.getU2FRegisteredDevices().addAll(authProfile.getU2FRegisteredDevices());
         
authProfileTO.getMfaTrustedDevices().addAll(authProfile.getMfaTrustedDevices());
         
authProfileTO.getWebAuthnDeviceCredentials().addAll(authProfile.getWebAuthnDeviceCredentials());
         return authProfileTO;
@@ -57,7 +56,6 @@ public class AuthProfileDataBinderImpl implements 
AuthProfileDataBinder {
         
authProfile.setImpersonationAccounts(authProfileTO.getImpersonationAccounts());
         
authProfile.setGoogleMfaAuthTokens(authProfileTO.getGoogleMfaAuthTokens());
         
authProfile.setGoogleMfaAuthAccounts(authProfileTO.getGoogleMfaAuthAccounts());
-        
authProfile.setU2FRegisteredDevices(authProfileTO.getU2FRegisteredDevices());
         authProfile.setMfaTrustedDevices(authProfileTO.getMfaTrustedDevices());
         
authProfile.setWebAuthnDeviceCredentials(authProfileTO.getWebAuthnDeviceCredentials());
         return authProfile;
diff --git 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/AfterHandlingJob.java
 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/AfterHandlingJob.java
index 5f8ceccc63..17f18dfa83 100644
--- 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/AfterHandlingJob.java
+++ 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/AfterHandlingJob.java
@@ -38,7 +38,6 @@ import org.quartz.TriggerBuilder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.support.AbstractBeanDefinition;
 import org.springframework.scheduling.quartz.SchedulerFactoryBean;
 
 /**
@@ -51,9 +50,7 @@ public class AfterHandlingJob extends 
AbstractInterruptableJob {
     private static final Logger LOG = 
LoggerFactory.getLogger(AfterHandlingJob.class);
 
     public static void schedule(final SchedulerFactoryBean scheduler, final 
Map<String, Object> jobMap) {
-        @SuppressWarnings("unchecked")
-        AfterHandlingJob jobInstance = (AfterHandlingJob) 
ApplicationContextProvider.getBeanFactory().
-                createBean(AfterHandlingJob.class, 
AbstractBeanDefinition.AUTOWIRE_BY_TYPE, false);
+        AfterHandlingJob jobInstance = 
ApplicationContextProvider.getBeanFactory().createBean(AfterHandlingJob.class);
         String jobName = AfterHandlingJob.class.getSimpleName() + 
SecureRandomUtils.generateRandomUUID();
 
         jobMap.put(JobManager.DOMAIN_KEY, AuthContextUtils.getDomain());
diff --git 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PriorityPropagationTaskExecutor.java
 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PriorityPropagationTaskExecutor.java
index 3ad8a519c7..a521b408b2 100644
--- 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PriorityPropagationTaskExecutor.java
+++ 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PriorityPropagationTaskExecutor.java
@@ -48,7 +48,6 @@ import 
org.apache.syncope.core.provisioning.api.propagation.PropagationTaskInfo;
 import org.apache.syncope.core.provisioning.java.pushpull.OutboundMatcher;
 import org.apache.syncope.core.provisioning.java.utils.ConnObjectUtils;
 import org.apache.syncope.core.spring.ApplicationContextProvider;
-import org.springframework.beans.factory.support.AbstractBeanDefinition;
 import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 
@@ -74,8 +73,8 @@ public class PriorityPropagationTaskExecutor extends 
AbstractPropagationTaskExec
     protected PropagationTaskCallable newPropagationTaskCallable(
             final PropagationTaskInfo taskInfo, final PropagationReporter 
reporter, final String executor) {
 
-        PropagationTaskCallable callable = (PropagationTaskCallable) 
ApplicationContextProvider.getBeanFactory().
-                createBean(DefaultPropagationTaskCallable.class, 
AbstractBeanDefinition.AUTOWIRE_BY_TYPE, false);
+        PropagationTaskCallable callable = 
ApplicationContextProvider.getBeanFactory().
+                createBean(DefaultPropagationTaskCallable.class);
         callable.setTaskInfo(taskInfo);
         callable.setReporter(reporter);
         callable.setExecutor(executor);
diff --git 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PullJobDelegate.java
 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PullJobDelegate.java
index ee0c5839e9..97e3267813 100644
--- 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PullJobDelegate.java
+++ 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PullJobDelegate.java
@@ -73,7 +73,6 @@ import 
org.identityconnectors.framework.common.objects.SyncToken;
 import org.quartz.JobExecutionContext;
 import org.quartz.JobExecutionException;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.support.AbstractBeanDefinition;
 
 public class PullJobDelegate extends AbstractProvisioningJobDelegate<PullTask> 
implements SyncopePullExecutor {
 
@@ -198,23 +197,19 @@ public class PullJobDelegate extends 
AbstractProvisioningJobDelegate<PullTask> i
     }
 
     protected RealmPullResultHandler buildRealmHandler() {
-        return (RealmPullResultHandler) 
ApplicationContextProvider.getBeanFactory().
-                createBean(DefaultRealmPullResultHandler.class, 
AbstractBeanDefinition.AUTOWIRE_BY_NAME, false);
+        return 
ApplicationContextProvider.getBeanFactory().createBean(DefaultRealmPullResultHandler.class);
     }
 
     protected AnyObjectPullResultHandler buildAnyObjectHandler() {
-        return (AnyObjectPullResultHandler) 
ApplicationContextProvider.getBeanFactory().
-                createBean(DefaultAnyObjectPullResultHandler.class, 
AbstractBeanDefinition.AUTOWIRE_BY_NAME, false);
+        return 
ApplicationContextProvider.getBeanFactory().createBean(DefaultAnyObjectPullResultHandler.class);
     }
 
     protected UserPullResultHandler buildUserHandler() {
-        return (UserPullResultHandler) 
ApplicationContextProvider.getBeanFactory().
-                createBean(DefaultUserPullResultHandler.class, 
AbstractBeanDefinition.AUTOWIRE_BY_NAME, false);
+        return 
ApplicationContextProvider.getBeanFactory().createBean(DefaultUserPullResultHandler.class);
     }
 
     protected GroupPullResultHandler buildGroupHandler() {
-        return (GroupPullResultHandler) 
ApplicationContextProvider.getBeanFactory().
-                createBean(DefaultGroupPullResultHandler.class, 
AbstractBeanDefinition.AUTOWIRE_BY_NAME, false);
+        return 
ApplicationContextProvider.getBeanFactory().createBean(DefaultGroupPullResultHandler.class);
     }
 
     @Override
diff --git 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PushJobDelegate.java
 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PushJobDelegate.java
index f72667d1ed..056c36a47e 100644
--- 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PushJobDelegate.java
+++ 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PushJobDelegate.java
@@ -59,7 +59,6 @@ import 
org.apache.syncope.core.spring.implementation.ImplementationManager;
 import org.quartz.JobExecutionContext;
 import org.quartz.JobExecutionException;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.support.AbstractBeanDefinition;
 
 public class PushJobDelegate extends AbstractProvisioningJobDelegate<PushTask> 
implements SyncopePushExecutor {
 
@@ -130,23 +129,19 @@ public class PushJobDelegate extends 
AbstractProvisioningJobDelegate<PushTask> i
     }
 
     protected RealmPushResultHandler buildRealmHandler() {
-        return (RealmPushResultHandler) 
ApplicationContextProvider.getBeanFactory().
-                createBean(DefaultRealmPushResultHandler.class, 
AbstractBeanDefinition.AUTOWIRE_BY_NAME, false);
+        return 
ApplicationContextProvider.getBeanFactory().createBean(DefaultRealmPushResultHandler.class);
     }
 
     protected AnyObjectPushResultHandler buildAnyObjectHandler() {
-        return (AnyObjectPushResultHandler) 
ApplicationContextProvider.getBeanFactory().
-                createBean(DefaultAnyObjectPushResultHandler.class, 
AbstractBeanDefinition.AUTOWIRE_BY_NAME, false);
+        return 
ApplicationContextProvider.getBeanFactory().createBean(DefaultAnyObjectPushResultHandler.class);
     }
 
     protected UserPushResultHandler buildUserHandler() {
-        return (UserPushResultHandler) 
ApplicationContextProvider.getBeanFactory().
-                createBean(DefaultUserPushResultHandler.class, 
AbstractBeanDefinition.AUTOWIRE_BY_NAME, false);
+        return 
ApplicationContextProvider.getBeanFactory().createBean(DefaultUserPushResultHandler.class);
     }
 
     protected GroupPushResultHandler buildGroupHandler() {
-        return (GroupPushResultHandler) 
ApplicationContextProvider.getBeanFactory().
-                createBean(DefaultGroupPushResultHandler.class, 
AbstractBeanDefinition.AUTOWIRE_BY_NAME, false);
+        return 
ApplicationContextProvider.getBeanFactory().createBean(DefaultGroupPushResultHandler.class);
     }
 
     protected List<PushActions> getPushActions(final List<? extends 
Implementation> impls) {
diff --git 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/stream/StreamPushJobDelegate.java
 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/stream/StreamPushJobDelegate.java
index fa7fbd4d8e..7f7cfc3652 100644
--- 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/stream/StreamPushJobDelegate.java
+++ 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/stream/StreamPushJobDelegate.java
@@ -50,7 +50,6 @@ import 
org.apache.syncope.core.spring.ApplicationContextProvider;
 import org.apache.syncope.core.spring.security.SecureRandomUtils;
 import org.quartz.JobExecutionException;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.support.AbstractBeanDefinition;
 
 public class StreamPushJobDelegate extends PushJobDelegate implements 
SyncopeStreamPushExecutor {
 
@@ -59,20 +58,17 @@ public class StreamPushJobDelegate extends PushJobDelegate 
implements SyncopeStr
 
     @Override
     protected AnyObjectPushResultHandler buildAnyObjectHandler() {
-        return (AnyObjectPushResultHandler) 
ApplicationContextProvider.getBeanFactory().createBean(
-                StreamAnyObjectPushResultHandler.class, 
AbstractBeanDefinition.AUTOWIRE_BY_NAME, false);
+        return 
ApplicationContextProvider.getBeanFactory().createBean(StreamAnyObjectPushResultHandler.class);
     }
 
     @Override
     protected UserPushResultHandler buildUserHandler() {
-        return (UserPushResultHandler) 
ApplicationContextProvider.getBeanFactory().
-                createBean(StreamUserPushResultHandler.class, 
AbstractBeanDefinition.AUTOWIRE_BY_NAME, false);
+        return 
ApplicationContextProvider.getBeanFactory().createBean(StreamUserPushResultHandler.class);
     }
 
     @Override
     protected GroupPushResultHandler buildGroupHandler() {
-        return (GroupPushResultHandler) 
ApplicationContextProvider.getBeanFactory().
-                createBean(StreamGroupPushResultHandler.class, 
AbstractBeanDefinition.AUTOWIRE_BY_NAME, false);
+        return 
ApplicationContextProvider.getBeanFactory().createBean(StreamGroupPushResultHandler.class);
     }
 
     private ExternalResource externalResource(
diff --git 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/utils/MappingUtils.java
 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/utils/MappingUtils.java
index a650bc2047..68393441c3 100644
--- 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/utils/MappingUtils.java
+++ 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/utils/MappingUtils.java
@@ -45,7 +45,6 @@ import 
org.identityconnectors.framework.common.objects.OperationalAttributes;
 import org.identityconnectors.framework.common.objects.Uid;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.support.AbstractBeanDefinition;
 
 public final class MappingUtils {
 
@@ -84,8 +83,8 @@ public final class MappingUtils {
         if (StringUtils.isNotBlank(item.getPropagationJEXLTransformer())
                 || StringUtils.isNotBlank(item.getPullJEXLTransformer())) {
 
-            JEXLItemTransformer jexlTransformer = (JEXLItemTransformer) 
ApplicationContextProvider.getBeanFactory().
-                    createBean(JEXLItemTransformerImpl.class, 
AbstractBeanDefinition.AUTOWIRE_BY_NAME, false);
+            JEXLItemTransformer jexlTransformer = 
ApplicationContextProvider.getBeanFactory().
+                    createBean(JEXLItemTransformerImpl.class);
 
             
jexlTransformer.setPropagationJEXL(item.getPropagationJEXLTransformer());
             jexlTransformer.setPullJEXL(item.getPullJEXLTransformer());
diff --git 
a/core/spring/src/main/java/org/apache/syncope/core/spring/implementation/ImplementationManager.java
 
b/core/spring/src/main/java/org/apache/syncope/core/spring/implementation/ImplementationManager.java
index 820142f644..95b2b96682 100644
--- 
a/core/spring/src/main/java/org/apache/syncope/core/spring/implementation/ImplementationManager.java
+++ 
b/core/spring/src/main/java/org/apache/syncope/core/spring/implementation/ImplementationManager.java
@@ -46,7 +46,6 @@ import 
org.apache.syncope.core.provisioning.api.rules.PullCorrelationRule;
 import org.apache.syncope.core.provisioning.api.rules.PushCorrelationRule;
 import org.apache.syncope.core.provisioning.api.serialization.POJOHelper;
 import org.apache.syncope.core.spring.ApplicationContextProvider;
-import org.springframework.beans.factory.support.AbstractBeanDefinition;
 
 public final class ImplementationManager {
 
@@ -192,7 +191,7 @@ public final class ImplementationManager {
         }
     }
 
-    @SuppressWarnings("unchecked")
+    @SuppressWarnings({ "unchecked", "rawtypes" })
     private static Class<? extends CommandArgs> findCommandArgsClass(final 
Type type) {
         if (type.getTypeName().startsWith(
                 
ImplementationTypesHolder.getInstance().getValues().get(IdRepoImplementationType.COMMAND)
 + "<")) {
@@ -200,8 +199,8 @@ public final class ImplementationManager {
             return (Class<? extends CommandArgs>) ((ParameterizedType) 
type).getActualTypeArguments()[0];
         }
 
-        if (type instanceof Class) {
-            for (Type i : ((Class) type).getGenericInterfaces()) {
+        if (type instanceof Class aClass) {
+            for (Type i : aClass.getGenericInterfaces()) {
                 Class<? extends CommandArgs> r = findCommandArgsClass(i);
                 if (r != null) {
                     return r;
@@ -254,8 +253,7 @@ public final class ImplementationManager {
 
     @SuppressWarnings("unchecked")
     public static <T> T build(final Implementation impl) throws 
ClassNotFoundException {
-        return (T) ApplicationContextProvider.getBeanFactory().
-                createBean(getClass(impl).getLeft(), 
AbstractBeanDefinition.AUTOWIRE_BY_TYPE, false);
+        return (T) 
ApplicationContextProvider.getBeanFactory().createBean(getClass(impl).getLeft());
     }
 
     @SuppressWarnings("unchecked")
@@ -273,8 +271,7 @@ public final class ImplementationManager {
             instance = cacheGetter.get();
         }
         if (instance == null) {
-            instance = (T) ApplicationContextProvider.getBeanFactory().
-                    createBean(clazz, AbstractBeanDefinition.AUTOWIRE_BY_TYPE, 
false);
+            instance = 
ApplicationContextProvider.getBeanFactory().createBean(clazz);
 
             if (perContext) {
                 cachePutter.accept(instance);
diff --git 
a/core/spring/src/main/java/org/apache/syncope/core/spring/security/AuthDataAccessor.java
 
b/core/spring/src/main/java/org/apache/syncope/core/spring/security/AuthDataAccessor.java
index 4bfed7b889..ae70656527 100644
--- 
a/core/spring/src/main/java/org/apache/syncope/core/spring/security/AuthDataAccessor.java
+++ 
b/core/spring/src/main/java/org/apache/syncope/core/spring/security/AuthDataAccessor.java
@@ -65,7 +65,6 @@ import 
org.apache.syncope.core.spring.ApplicationContextProvider;
 import org.identityconnectors.framework.common.objects.Uid;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.support.AbstractBeanDefinition;
 import 
org.springframework.security.authentication.AuthenticationCredentialsNotFoundException;
 import org.springframework.security.authentication.DisabledException;
 import org.springframework.security.core.Authentication;
@@ -158,8 +157,7 @@ public class AuthDataAccessor {
                 jwtSSOProviders = new HashMap<>();
 
                 implementationLookup.getJWTSSOProviderClasses().stream().
-                        map(clazz -> (JWTSSOProvider) 
ApplicationContextProvider.getBeanFactory().
-                        createBean(clazz, 
AbstractBeanDefinition.AUTOWIRE_BY_TYPE, true)).
+                        map(clazz -> (JWTSSOProvider) 
ApplicationContextProvider.getBeanFactory().createBean(clazz)).
                         forEach(jwtSSOProvider -> 
jwtSSOProviders.put(jwtSSOProvider.getIssuer(), jwtSSOProvider));
             }
         }
diff --git 
a/ext/flowable/flowable-bpmn/src/main/java/org/apache/syncope/core/flowable/support/SyncopeIdmIdentityService.java
 
b/ext/flowable/flowable-bpmn/src/main/java/org/apache/syncope/core/flowable/support/SyncopeIdmIdentityService.java
index c30eeb1262..ff61fe7985 100644
--- 
a/ext/flowable/flowable-bpmn/src/main/java/org/apache/syncope/core/flowable/support/SyncopeIdmIdentityService.java
+++ 
b/ext/flowable/flowable-bpmn/src/main/java/org/apache/syncope/core/flowable/support/SyncopeIdmIdentityService.java
@@ -22,7 +22,6 @@ import org.flowable.idm.api.GroupQuery;
 import org.flowable.idm.api.UserQuery;
 import org.flowable.idm.engine.IdmEngineConfiguration;
 import org.flowable.idm.engine.impl.IdmIdentityServiceImpl;
-import org.springframework.beans.factory.support.AbstractBeanDefinition;
 import org.springframework.context.ConfigurableApplicationContext;
 
 public class SyncopeIdmIdentityService extends IdmIdentityServiceImpl {
@@ -39,13 +38,11 @@ public class SyncopeIdmIdentityService extends 
IdmIdentityServiceImpl {
 
     @Override
     public UserQuery createUserQuery() {
-        return (UserQuery) ctx.getBeanFactory().
-                createBean(SyncopeUserQueryImpl.class, 
AbstractBeanDefinition.AUTOWIRE_BY_TYPE, false);
+        return ctx.getBeanFactory().createBean(SyncopeUserQueryImpl.class);
     }
 
     @Override
     public GroupQuery createGroupQuery() {
-        return (GroupQuery) ctx.getBeanFactory().
-                createBean(SyncopeGroupQueryImpl.class, 
AbstractBeanDefinition.AUTOWIRE_BY_TYPE, false);
+        return ctx.getBeanFactory().createBean(SyncopeGroupQueryImpl.class);
     }
 }
diff --git 
a/ext/oidcc4ui/logic/src/main/java/org/apache/syncope/core/logic/OIDCC4UILogic.java
 
b/ext/oidcc4ui/logic/src/main/java/org/apache/syncope/core/logic/OIDCC4UILogic.java
index 2daa162e13..aa981be0ab 100644
--- 
a/ext/oidcc4ui/logic/src/main/java/org/apache/syncope/core/logic/OIDCC4UILogic.java
+++ 
b/ext/oidcc4ui/logic/src/main/java/org/apache/syncope/core/logic/OIDCC4UILogic.java
@@ -20,7 +20,6 @@ package org.apache.syncope.core.logic;
 
 import com.nimbusds.jwt.JWTClaimsSet;
 import com.nimbusds.jwt.SignedJWT;
-import com.nimbusds.oauth2.sdk.AuthorizationCode;
 import java.lang.reflect.Method;
 import java.text.ParseException;
 import java.time.OffsetDateTime;
@@ -141,13 +140,13 @@ public class OIDCC4UILogic extends 
AbstractTransactionalLogic<EntityTO> {
         JWTClaimsSet idToken;
         try {
             OidcCredentials credentials = new OidcCredentials();
-            credentials.setCode(new AuthorizationCode(authorizationCode));
+            credentials.setCode(authorizationCode);
 
             oidcClient.getAuthenticator().validate(
                     new CallContext(new OIDCC4UIContext(), 
NoOpSessionStore.INSTANCE), credentials);
 
-            idToken = credentials.getIdToken().getJWTClaimsSet();
-            idTokenHint = credentials.getIdToken().serialize();
+            idToken = credentials.toIdToken().getJWTClaimsSet();
+            idTokenHint = credentials.toIdToken().serialize();
         } catch (Exception e) {
             LOG.error("While validating Token Response", e);
             SyncopeClientException sce = 
SyncopeClientException.build(ClientExceptionType.Unknown);
diff --git 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/AbstractITCase.java 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/AbstractITCase.java
index 01eda292e0..3e3743a751 100644
--- 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/AbstractITCase.java
+++ 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/AbstractITCase.java
@@ -160,7 +160,6 @@ import 
org.apache.syncope.common.rest.api.service.wa.GoogleMfaAuthAccountService
 import org.apache.syncope.common.rest.api.service.wa.GoogleMfaAuthTokenService;
 import org.apache.syncope.common.rest.api.service.wa.ImpersonationService;
 import org.apache.syncope.common.rest.api.service.wa.MfaTrustStorageService;
-import org.apache.syncope.common.rest.api.service.wa.U2FRegistrationService;
 import org.apache.syncope.common.rest.api.service.wa.WAConfigService;
 import 
org.apache.syncope.common.rest.api.service.wa.WebAuthnRegistrationService;
 import org.apache.syncope.fit.AbstractITCase.KeymasterInitializer;
@@ -384,8 +383,6 @@ public abstract class AbstractITCase {
 
     protected static GoogleMfaAuthAccountService 
GOOGLE_MFA_AUTH_ACCOUNT_SERVICE;
 
-    protected static U2FRegistrationService U2F_REGISTRATION_SERVICE;
-
     protected static MfaTrustStorageService MFA_TRUST_STORAGE_SERVICE;
 
     protected static WebAuthnRegistrationService WEBAUTHN_REGISTRATION_SERVICE;
@@ -420,7 +417,6 @@ public abstract class AbstractITCase {
 
         GOOGLE_MFA_AUTH_TOKEN_SERVICE = 
ANONYMOUS_CLIENT.getService(GoogleMfaAuthTokenService.class);
         GOOGLE_MFA_AUTH_ACCOUNT_SERVICE = 
ANONYMOUS_CLIENT.getService(GoogleMfaAuthAccountService.class);
-        U2F_REGISTRATION_SERVICE = 
ANONYMOUS_CLIENT.getService(U2FRegistrationService.class);
         MFA_TRUST_STORAGE_SERVICE = 
ANONYMOUS_CLIENT.getService(MfaTrustStorageService.class);
         WEBAUTHN_REGISTRATION_SERVICE = 
ANONYMOUS_CLIENT.getService(WebAuthnRegistrationService.class);
         IMPERSONATION_SERVICE = 
ANONYMOUS_CLIENT.getService(ImpersonationService.class);
diff --git 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/UsersITCase.java
 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/UsersITCase.java
index 8e77078fb3..7bdd6f9780 100644
--- 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/UsersITCase.java
+++ 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/UsersITCase.java
@@ -30,6 +30,7 @@ import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.form.TextField;
 import org.apache.wicket.util.tester.FormTester;
 import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 
 public class UsersITCase extends AbstractConsoleITCase {
@@ -584,6 +585,7 @@ public class UsersITCase extends AbstractConsoleITCase {
                 + "actions:actions:actionRepeater:11:action:action", 
IndicatingOnConfirmAjaxLink.class);
     }
 
+    @Disabled
     @Test
     public void editDateTimeField() {
         TESTER.clickLink("body:realmsLI:realms", false);
@@ -660,15 +662,15 @@ public class UsersITCase extends AbstractConsoleITCase {
         assertNotNull(formTester);
         formTester.submit("buttons:next");
 
+        assertEquals("12:00 AM", 
TESTER.getComponentFromLastRenderedPage("body:content:body:"
+                + "container:content:tabbedPanel:panel:searchResult:"
+                + 
"outerObjectsRepeater:0:outer:form:content:form:view:plainSchemas:"
+                + 
"tabs:0:body:content:schemas:1:panel:field:timepicker").getDefaultModelObjectAsString());
+
         Calendar cal = Calendar.getInstance();
         cal.set(2017, Calendar.JANUARY, 19, 0, 0, 0);
         cal.set(Calendar.MILLISECOND, 0);
 
-        
assertEquals(TESTER.getComponentFromLastRenderedPage("body:content:body:"
-                + "container:content:tabbedPanel:panel:searchResult:"
-                + 
"outerObjectsRepeater:0:outer:form:content:form:view:plainSchemas:"
-                + 
"tabs:0:body:content:schemas:1:panel:field:timepicker").getDefaultModelObjectAsString(),
 "12:00 AM");
-
         TESTER.assertModelValue("body:content:body:container:content:"
                 + 
"tabbedPanel:panel:searchResult:outerObjectsRepeater:0:outer:form:content:"
                 + "form:view:plainSchemas:tabs:0:body:content:schemas:8:panel:"
diff --git 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AuthModuleITCase.java
 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AuthModuleITCase.java
index 99bd35631b..5c365b9561 100644
--- 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AuthModuleITCase.java
+++ 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AuthModuleITCase.java
@@ -45,7 +45,6 @@ import org.apache.syncope.common.lib.auth.OIDCAuthModuleConf;
 import org.apache.syncope.common.lib.auth.SAML2IdPAuthModuleConf;
 import org.apache.syncope.common.lib.auth.StaticAuthModuleConf;
 import org.apache.syncope.common.lib.auth.SyncopeAuthModuleConf;
-import org.apache.syncope.common.lib.auth.U2FAuthModuleConf;
 import org.apache.syncope.common.lib.to.AuthModuleTO;
 import org.apache.syncope.common.lib.to.Item;
 import org.apache.syncope.common.rest.api.service.AuthModuleService;
@@ -63,7 +62,6 @@ public class AuthModuleITCase extends AbstractITCase {
         LDAP,
         JAAS,
         JDBC,
-        U2F,
         OIDC,
         OAUTH20;
 
@@ -166,11 +164,6 @@ public class AuthModuleITCase extends AbstractITCase {
                 
SyncopeAuthModuleConf.class.cast(conf).setDomain(SyncopeConstants.MASTER_DOMAIN);
                 break;
 
-            case U2F:
-                conf = new U2FAuthModuleConf();
-                U2FAuthModuleConf.class.cast(conf).setExpireDevices(50);
-                break;
-
             case STATIC:
             default:
                 conf = new StaticAuthModuleConf();
@@ -230,12 +223,9 @@ public class AuthModuleITCase extends AbstractITCase {
         assertTrue(authModuleTOs.stream().anyMatch(
                 authModule -> isSpecificConf(authModule.getConf(), 
SyncopeAuthModuleConf.class)
                 && authModule.getKey().equals("DefaultSyncopeAuthModule")));
-        assertTrue(authModuleTOs.stream().anyMatch(
-                authModule -> isSpecificConf(authModule.getConf(), 
U2FAuthModuleConf.class)
-                && authModule.getKey().equals("DefaultU2FAuthModule")));
         assertTrue(authModuleTOs.stream().anyMatch(
                 authModule -> isSpecificConf(authModule.getConf(), 
OAuth20AuthModuleConf.class)
-                        && 
authModule.getKey().equals("DefaultOAuth20AuthModule")));
+                && authModule.getKey().equals("DefaultOAuth20AuthModule")));
     }
 
     @Test
@@ -334,17 +324,6 @@ public class AuthModuleITCase extends AbstractITCase {
         assertNotNull(authModuleTO);
         assertTrue(StringUtils.isNotBlank(authModuleTO.getDescription()));
         assertTrue(isSpecificConf(authModuleTO.getConf(), 
SyncopeAuthModuleConf.class));
-        assertFalse(isSpecificConf(authModuleTO.getConf(), 
U2FAuthModuleConf.class));
-    }
-
-    @Test
-    public void getU2FAuthModule() {
-        AuthModuleTO authModuleTO = 
AUTH_MODULE_SERVICE.read("DefaultU2FAuthModule");
-
-        assertNotNull(authModuleTO);
-        assertTrue(StringUtils.isNotBlank(authModuleTO.getDescription()));
-        assertTrue(isSpecificConf(authModuleTO.getConf(), 
U2FAuthModuleConf.class));
-        assertFalse(isSpecificConf(authModuleTO.getConf(), 
LDAPAuthModuleConf.class));
     }
 
     @Test
@@ -566,29 +545,6 @@ public class AuthModuleITCase extends AbstractITCase {
         assertEquals(2, 
StaticAuthModuleConf.class.cast(conf).getUsers().size());
     }
 
-    @Test
-    public void updateU2fAuthModule() {
-        AuthModuleTO u2fAuthModuleTO = 
AUTH_MODULE_SERVICE.read("DefaultU2FAuthModule");
-        assertNotNull(u2fAuthModuleTO);
-
-        AuthModuleTO newU2fAuthModuleTO = 
buildAuthModuleTO(AuthModuleSupportedType.U2F);
-        newU2fAuthModuleTO = createAuthModule(newU2fAuthModuleTO);
-        assertNotNull(newU2fAuthModuleTO);
-
-        AuthModuleConf conf = u2fAuthModuleTO.getConf();
-        assertNotNull(conf);
-        U2FAuthModuleConf.class.cast(conf).setExpireDevices(24);
-        newU2fAuthModuleTO.setConf(conf);
-
-        // update new auth module
-        AUTH_MODULE_SERVICE.update(newU2fAuthModuleTO);
-        newU2fAuthModuleTO = 
AUTH_MODULE_SERVICE.read(newU2fAuthModuleTO.getKey());
-        assertNotNull(newU2fAuthModuleTO);
-
-        conf = newU2fAuthModuleTO.getConf();
-        assertEquals(24, 
U2FAuthModuleConf.class.cast(conf).getExpireDevices());
-    }
-
     @Test
     public void updateSyncopeAuthModule() {
         AuthModuleTO syncopeAuthModuleTO = 
AUTH_MODULE_SERVICE.read("DefaultSyncopeAuthModule");
diff --git 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/wa/U2FRegistrationITCase.java
 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/wa/U2FRegistrationITCase.java
deleted file mode 100644
index 0a5bc9183b..0000000000
--- 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/wa/U2FRegistrationITCase.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.fit.core.wa;
-
-import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
-import java.time.OffsetDateTime;
-import java.util.List;
-import java.util.UUID;
-import org.apache.syncope.common.lib.wa.U2FDevice;
-import org.apache.syncope.common.rest.api.beans.U2FDeviceQuery;
-import org.apache.syncope.fit.AbstractITCase;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-
-public class U2FRegistrationITCase extends AbstractITCase {
-
-    private static U2FDevice createDeviceRegistration() {
-        return new U2FDevice.Builder()
-                .issueDate(OffsetDateTime.now())
-                .id(System.currentTimeMillis())
-                
.record("{\"keyHandle\":\"2_QYgDSPYcOgYBGBe8c9PVCunjigbD-3o5HcliXhu-Up_GKckYMxxVF6AgSPWubqfWy8WmJNDYQE"
-                        + "J1QKZe343Q\","
-                        + 
"\"publicKey\":\"BMj46cH-lHkRMovZhrusmm_fYL_sFausDPJIDZfx4pIiRqRNtasd4vU3yJyrTXXbdxyD36GZLx1"
-                        + "WKLHGmApv7Nk\""
-                        + ",\"counter\":-1,\"compromised\":false}")
-                .build();
-    }
-
-    @BeforeEach
-    public void setup() {
-        U2F_REGISTRATION_SERVICE.delete(new U2FDeviceQuery.Builder().build());
-    }
-
-    @Test
-    public void create() {
-        assertDoesNotThrow(() -> U2F_REGISTRATION_SERVICE.create(
-                UUID.randomUUID().toString(), createDeviceRegistration()));
-    }
-
-    @Test
-    public void count() {
-        String owner = UUID.randomUUID().toString();
-        U2FDevice device = createDeviceRegistration();
-        U2F_REGISTRATION_SERVICE.create(owner, device);
-
-        List<U2FDevice> devices = U2F_REGISTRATION_SERVICE.search(new 
U2FDeviceQuery.Builder().
-                owner(owner).
-                expirationDate(OffsetDateTime.now().minusDays(1)).
-                build()).getResult();
-        assertEquals(1, devices.size());
-
-        U2F_REGISTRATION_SERVICE.delete(new 
U2FDeviceQuery.Builder().id(device.getId()).build());
-
-        devices = U2F_REGISTRATION_SERVICE.search(new 
U2FDeviceQuery.Builder().build()).getResult();
-        assertTrue(devices.isEmpty());
-    }
-
-    @Test
-    public void delete() {
-        U2FDevice device = createDeviceRegistration();
-        String owner = UUID.randomUUID().toString();
-        U2F_REGISTRATION_SERVICE.create(owner, device);
-
-        U2F_REGISTRATION_SERVICE.delete(new 
U2FDeviceQuery.Builder().owner(owner).build());
-        assertTrue(U2F_REGISTRATION_SERVICE.search(
-                new 
U2FDeviceQuery.Builder().owner(owner).build()).getResult().isEmpty());
-
-        OffsetDateTime date = OffsetDateTime.now().plusDays(1);
-
-        U2F_REGISTRATION_SERVICE.delete(new 
U2FDeviceQuery.Builder().expirationDate(date).build());
-
-        assertTrue(U2F_REGISTRATION_SERVICE.search(
-                new 
U2FDeviceQuery.Builder().expirationDate(date).build()).getResult().isEmpty());
-    }
-}
diff --git a/pom.xml b/pom.xml
index 458ebaf74b..8f58856ea7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -411,10 +411,10 @@ under the License.
 
     <cxf.version>4.0.2</cxf.version>
     <bouncycastle.version>1.76</bouncycastle.version>
-    <nimbus-jose-jwt.version>9.31</nimbus-jose-jwt.version>
+    <nimbus-jose-jwt.version>9.34</nimbus-jose-jwt.version>
 
-    <spring-boot.version>3.1.3</spring-boot.version>
-    <spring-cloud-gateway.version>4.0.7</spring-cloud-gateway.version>
+    <spring-boot.version>3.2.0-M2</spring-boot.version>
+    <spring-cloud-gateway.version>4.1.0-M1</spring-cloud-gateway.version>
 
     <openjpa.version>4.0.0-SNAPSHOT</openjpa.version>
 
@@ -430,7 +430,7 @@ under the License.
     <commons-jexl.version>3.3</commons-jexl.version>
     <commons-text.version>1.10.0</commons-text.version>
 
-    <pac4j.version>6.0.0-RC8-SNAPSHOT</pac4j.version>
+    <pac4j.version>6.0.0-RC9-SNAPSHOT</pac4j.version>
 
     <cas.version>7.0.0-SNAPSHOT</cas.version>
     <cas-client.version>4.0.2</cas-client.version>
@@ -527,7 +527,7 @@ under the License.
     
<sonar.junit.reportPaths>${project.build.directory}/surefire-reports</sonar.junit.reportPaths>
     
<sonar.coverage.jacoco.xmlReportPaths>target/site/jacoco/jacoco.xml</sonar.coverage.jacoco.xmlReportPaths>
 
-    <targetJdk>17</targetJdk>
+    <targetJdk>21</targetJdk>
     <rootpom.basedir>${basedir}</rootpom.basedir>
     
<maven.multiModuleProjectDirectory>${rootpom.basedir}</maven.multiModuleProjectDirectory>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -873,7 +873,7 @@ under the License.
       <dependency>
         <groupId>com.icegreen</groupId>
         <artifactId>greenmail</artifactId>
-        <version>2.0.0</version>
+        <version>2.1.0-alpha-2</version>
         <exclusions>
           <exclusion>
             <groupId>com.sun.mail</groupId>
@@ -958,12 +958,22 @@ under the License.
             <groupId>org.bouncycastle</groupId>
             <artifactId>bcprov-jdk15on</artifactId>
           </exclusion>
+          <exclusion>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+          </exclusion>
         </exclusions>
       </dependency>
       <dependency>
         <groupId>org.pac4j</groupId>
         <artifactId>pac4j-oidc</artifactId>
         <version>${pac4j.version}</version>
+        <exclusions>
+          <exclusion>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+          </exclusion>          
+        </exclusions>
       </dependency>
       <!-- PAC4J -->
 
@@ -1211,8 +1221,7 @@ under the License.
       <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-contract-wiremock</artifactId>
-        <!-- TMP, it should be ${spring-cloud-gateway.version} -->
-        <version>4.0.4</version>
+        <version>${spring-cloud-gateway.version}</version>
         <scope>test</scope>
       </dependency>
     </dependencies>
@@ -1248,8 +1257,8 @@ under the License.
     </repository>
     <!-- TMP -->
     <repository>
-      <id>shibboleth-snapshots</id>
-      
<url>https://build.shibboleth.net/nexus/content/repositories/snapshots</url>
+      <id>projectlombok.org</id>
+      <url>https://projectlombok.org/edge-releases</url>
       <releases>
         <enabled>false</enabled>
       </releases>
@@ -1623,7 +1632,7 @@ under the License.
         <plugin>
           <groupId>org.sonarsource.scanner.maven</groupId>
           <artifactId>sonar-maven-plugin</artifactId>
-          <version>3.9.1.2184</version>
+          <version>3.10.0.2594</version>
         </plugin>
       </plugins>
     </pluginManagement>
@@ -1656,7 +1665,7 @@ under the License.
       <plugin>
         <groupId>org.gaul</groupId>
         <artifactId>modernizer-maven-plugin</artifactId>
-        <version>2.6.0</version>
+        <version>2.7.0-SNAPSHOT</version>
         <configuration>
           <javaVersion>${targetJdk}</javaVersion>
           <ignorePackages>
@@ -1725,7 +1734,7 @@ under the License.
           <dependency>
             <groupId>org.apache.groovy</groupId>
             <artifactId>groovy-ant</artifactId>
-            <version>4.0.14</version>
+            <version>4.0.15</version>
           </dependency>
         </dependencies>
         <executions>
diff --git a/sra/pom.xml b/sra/pom.xml
index fd90d5c26a..9130ea3a73 100644
--- a/sra/pom.xml
+++ b/sra/pom.xml
@@ -378,5 +378,4 @@ under the License.
       </build>
     </profile>
   </profiles>
-
 </project>
diff --git 
a/sra/src/main/java/org/apache/syncope/sra/ApplicationContextUtils.java 
b/sra/src/main/java/org/apache/syncope/sra/ApplicationContextUtils.java
index e042b2663f..8cef538983 100644
--- a/sra/src/main/java/org/apache/syncope/sra/ApplicationContextUtils.java
+++ b/sra/src/main/java/org/apache/syncope/sra/ApplicationContextUtils.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.sra;
 
 import org.springframework.beans.factory.config.BeanDefinition;
-import org.springframework.beans.factory.support.AbstractBeanDefinition;
 import org.springframework.beans.factory.support.BeanDefinitionRegistry;
 import org.springframework.beans.factory.support.RootBeanDefinition;
 import org.springframework.context.ApplicationListener;
@@ -37,14 +36,12 @@ public final class ApplicationContextUtils {
             bean = type.cast(ctx.getBeanFactory().getSingleton(actualClazz));
         } else {
             if (ApplicationListener.class.isAssignableFrom(type)) {
-                RootBeanDefinition bd = new RootBeanDefinition(
-                        Class.forName(actualClazz), 
AbstractBeanDefinition.AUTOWIRE_BY_TYPE, false);
+                RootBeanDefinition bd = new 
RootBeanDefinition(Class.forName(actualClazz));
                 bd.setScope(BeanDefinition.SCOPE_SINGLETON);
                 ((BeanDefinitionRegistry) 
ctx.getBeanFactory()).registerBeanDefinition(actualClazz, bd);
                 bean = ctx.getBean(type);
             } else {
-                bean = type.cast(ctx.getBeanFactory().
-                        createBean(Class.forName(actualClazz), 
AbstractBeanDefinition.AUTOWIRE_BY_TYPE, false));
+                bean = 
type.cast(ctx.getBeanFactory().createBean(Class.forName(actualClazz)));
                 ctx.getBeanFactory().registerSingleton(actualClazz, bean);
             }
         }
diff --git 
a/sra/src/main/java/org/apache/syncope/sra/security/cas/CASUtils.java 
b/sra/src/main/java/org/apache/syncope/sra/security/cas/CASUtils.java
index 392d133c9e..6f7eff47b8 100644
--- a/sra/src/main/java/org/apache/syncope/sra/security/cas/CASUtils.java
+++ b/sra/src/main/java/org/apache/syncope/sra/security/cas/CASUtils.java
@@ -24,7 +24,7 @@ import org.slf4j.LoggerFactory;
 import org.springframework.http.HttpMethod;
 import 
org.springframework.security.web.server.util.matcher.ServerWebExchangeMatcher;
 import org.springframework.web.server.ServerWebExchange;
-import org.springframework.web.util.UriComponentsBuilder;
+import org.springframework.web.util.ForwardedHeaderUtils;
 import reactor.core.publisher.Mono;
 
 public final class CASUtils {
@@ -54,7 +54,8 @@ public final class CASUtils {
     }
 
     public static String constructServiceUrl(final ServerWebExchange exchange, 
final Protocol protocol) {
-        return UriComponentsBuilder.fromHttpRequest(exchange.getRequest()).
+        return ForwardedHeaderUtils.
+                adaptFromForwardedHeaders(exchange.getRequest().getURI(), 
exchange.getRequest().getHeaders()).
                 replaceQueryParam(protocol.getArtifactParameterName()).
                 build().
                 toUriString();
diff --git 
a/sra/src/main/java/org/apache/syncope/sra/security/pac4j/ServerWebExchangeContext.java
 
b/sra/src/main/java/org/apache/syncope/sra/security/pac4j/ServerWebExchangeContext.java
index d728094ccb..ff2d76dc64 100644
--- 
a/sra/src/main/java/org/apache/syncope/sra/security/pac4j/ServerWebExchangeContext.java
+++ 
b/sra/src/main/java/org/apache/syncope/sra/security/pac4j/ServerWebExchangeContext.java
@@ -32,7 +32,7 @@ import org.springframework.http.HttpHeaders;
 import org.springframework.http.ResponseCookie;
 import org.springframework.util.MultiValueMap;
 import org.springframework.web.server.ServerWebExchange;
-import org.springframework.web.util.UriComponentsBuilder;
+import org.springframework.web.util.ForwardedHeaderUtils;
 
 public class ServerWebExchangeContext implements WebContext {
 
@@ -139,17 +139,23 @@ public class ServerWebExchangeContext implements 
WebContext {
 
     @Override
     public String getServerName() {
-        return 
UriComponentsBuilder.fromHttpRequest(exchange.getRequest()).build().getHost();
+        return ForwardedHeaderUtils.
+                adaptFromForwardedHeaders(exchange.getRequest().getURI(), 
exchange.getRequest().getHeaders()).
+                build().getHost();
     }
 
     @Override
     public int getServerPort() {
-        return 
UriComponentsBuilder.fromHttpRequest(exchange.getRequest()).build().getPort();
+        return ForwardedHeaderUtils.
+                adaptFromForwardedHeaders(exchange.getRequest().getURI(), 
exchange.getRequest().getHeaders()).
+                build().getPort();
     }
 
     @Override
     public String getScheme() {
-        return 
UriComponentsBuilder.fromHttpRequest(exchange.getRequest()).build().getScheme();
+        return ForwardedHeaderUtils.
+                adaptFromForwardedHeaders(exchange.getRequest().getURI(), 
exchange.getRequest().getHeaders()).
+                build().getScheme();
     }
 
     @Override
@@ -159,7 +165,9 @@ public class ServerWebExchangeContext implements WebContext 
{
 
     @Override
     public String getFullRequestURL() {
-        return 
UriComponentsBuilder.fromHttpRequest(exchange.getRequest()).build().toUriString();
+        return ForwardedHeaderUtils.
+                adaptFromForwardedHeaders(exchange.getRequest().getURI(), 
exchange.getRequest().getHeaders()).
+                build().toUriString();
     }
 
     @Override
diff --git 
a/src/main/asciidoc/reference-guide/concepts/authenticationmodules.adoc 
b/src/main/asciidoc/reference-guide/concepts/authenticationmodules.adoc
index 3e3e5c40ba..becac0352f 100644
--- a/src/main/asciidoc/reference-guide/concepts/authenticationmodules.adoc
+++ b/src/main/asciidoc/reference-guide/concepts/authenticationmodules.adoc
@@ -35,7 +35,6 @@ Several authentication modules are provided:
     ** 
https://apereo.github.io/cas/6.6.x/integration/Delegate-Authentication-Azure-AD.html[Azure
 Active Directory^]
 * MFA:
     ** 
https://apereo.github.io/cas/6.6.x/mfa/DuoSecurity-Authentication.html[Duo 
Security^]
-    ** 
https://apereo.github.io/cas/6.6.x/mfa/FIDO-U2F-Authentication.html[Fido U2F^]
     ** 
https://apereo.github.io/cas/6.6.x/mfa/GoogleAuthenticator-Authentication.html[Google
 Authenticator^]
 
 [TIP]
diff --git 
a/wa/bootstrap/src/main/java/org/apache/syncope/wa/bootstrap/mapping/AuthModulePropertySourceMapper.java
 
b/wa/bootstrap/src/main/java/org/apache/syncope/wa/bootstrap/mapping/AuthModulePropertySourceMapper.java
index 28667f974f..7f035c0cf0 100644
--- 
a/wa/bootstrap/src/main/java/org/apache/syncope/wa/bootstrap/mapping/AuthModulePropertySourceMapper.java
+++ 
b/wa/bootstrap/src/main/java/org/apache/syncope/wa/bootstrap/mapping/AuthModulePropertySourceMapper.java
@@ -21,7 +21,6 @@ package org.apache.syncope.wa.bootstrap.mapping;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
-import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.lib.SyncopeClient;
@@ -42,7 +41,6 @@ import 
org.apache.syncope.common.lib.auth.SAML2IdPAuthModuleConf;
 import org.apache.syncope.common.lib.auth.SimpleMfaAuthModuleConf;
 import org.apache.syncope.common.lib.auth.StaticAuthModuleConf;
 import org.apache.syncope.common.lib.auth.SyncopeAuthModuleConf;
-import org.apache.syncope.common.lib.auth.U2FAuthModuleConf;
 import org.apache.syncope.common.lib.to.AuthModuleTO;
 import org.apache.syncope.common.lib.to.Item;
 import org.apache.syncope.common.lib.types.AuthModuleState;
@@ -59,7 +57,6 @@ import 
org.apereo.cas.configuration.model.support.mfa.duo.DuoSecurityMultifactor
 import 
org.apereo.cas.configuration.model.support.mfa.gauth.GoogleAuthenticatorMultifactorProperties;
 import 
org.apereo.cas.configuration.model.support.mfa.gauth.LdapGoogleAuthenticatorMultifactorProperties;
 import 
org.apereo.cas.configuration.model.support.mfa.simple.CasSimpleMultifactorAuthenticationProperties;
-import 
org.apereo.cas.configuration.model.support.mfa.u2f.U2FMultifactorAuthenticationProperties;
 import 
org.apereo.cas.configuration.model.support.pac4j.oauth.Pac4jOAuth20ClientProperties;
 import 
org.apereo.cas.configuration.model.support.pac4j.oidc.BasePac4jOidcClientProperties;
 import 
org.apereo.cas.configuration.model.support.pac4j.oidc.Pac4jAppleOidcClientProperties;
@@ -346,19 +343,6 @@ public class AuthModulePropertySourceMapper extends 
PropertySourceMapper impleme
         return prefix("cas.authn.mfa.duo.", 
CasCoreConfigurationUtils.asMap(props));
     }
 
-    @Override
-    public Map<String, Object> map(final AuthModuleTO authModuleTO, final 
U2FAuthModuleConf conf) {
-        U2FMultifactorAuthenticationProperties props = new 
U2FMultifactorAuthenticationProperties();
-        props.setName(authModuleTO.getKey());
-        props.setOrder(authModuleTO.getOrder());
-        props.getCore().setExpireDevices(conf.getExpireDevices());
-        
props.getCore().setExpireDevicesTimeUnit(TimeUnit.valueOf(conf.getExpireDevicesTimeUnit()));
-        props.getCore().setExpireRegistrations(conf.getExpireRegistrations());
-        
props.getCore().setExpireRegistrationsTimeUnit(TimeUnit.valueOf(conf.getExpireRegistrationsTimeUnit()));
-
-        return prefix("cas.authn.mfa.u2f.", 
CasCoreConfigurationUtils.asMap(props));
-    }
-
     @Override
     public Map<String, Object> map(final AuthModuleTO authModuleTO, final 
SimpleMfaAuthModuleConf conf) {
         CasSimpleMultifactorAuthenticationProperties props = new 
CasSimpleMultifactorAuthenticationProperties();
diff --git a/wa/starter/pom.xml b/wa/starter/pom.xml
index ec9753feb2..9b1c7a3c60 100644
--- a/wa/starter/pom.xml
+++ b/wa/starter/pom.xml
@@ -249,14 +249,6 @@ under the License.
       <groupId>org.apereo.cas</groupId>
       <artifactId>cas-server-support-aup-webflow</artifactId>
     </dependency>
-    <dependency>
-      <groupId>org.apereo.cas</groupId>
-      <artifactId>cas-server-support-u2f</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apereo.cas</groupId>
-      <artifactId>cas-server-support-u2f-core</artifactId>
-    </dependency>
     <dependency>
       <groupId>org.apereo.cas</groupId>
       <artifactId>cas-server-support-webauthn</artifactId>
diff --git 
a/wa/starter/src/main/java/org/apache/syncope/wa/starter/config/WAContext.java 
b/wa/starter/src/main/java/org/apache/syncope/wa/starter/config/WAContext.java
index 9451b94c4d..2fff3eb073 100644
--- 
a/wa/starter/src/main/java/org/apache/syncope/wa/starter/config/WAContext.java
+++ 
b/wa/starter/src/main/java/org/apache/syncope/wa/starter/config/WAContext.java
@@ -19,15 +19,12 @@
 package org.apache.syncope.wa.starter.config;
 
 import com.github.benmanes.caffeine.cache.Cache;
-import com.github.benmanes.caffeine.cache.Caffeine;
-import com.github.benmanes.caffeine.cache.LoadingCache;
 import com.warrenstrange.googleauth.IGoogleAuthenticator;
 import io.swagger.v3.oas.models.OpenAPI;
 import io.swagger.v3.oas.models.info.Contact;
 import io.swagger.v3.oas.models.info.Info;
 import io.swagger.v3.oas.models.security.SecurityScheme;
 import java.io.Serializable;
-import java.time.OffsetDateTime;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
@@ -66,16 +63,13 @@ import 
org.apache.syncope.wa.starter.saml.idp.metadata.WASamlIdPMetadataGenerato
 import 
org.apache.syncope.wa.starter.saml.idp.metadata.WASamlIdPMetadataLocator;
 import org.apache.syncope.wa.starter.services.WAServiceRegistry;
 import 
org.apache.syncope.wa.starter.surrogate.WASurrogateAuthenticationService;
-import org.apache.syncope.wa.starter.u2f.WAU2FDeviceRepository;
 import org.apache.syncope.wa.starter.webauthn.WAWebAuthnCredentialRepository;
-import org.apereo.cas.adaptors.u2f.storage.U2FDeviceRepository;
 import org.apereo.cas.audit.AuditTrailExecutionPlanConfigurer;
 import org.apereo.cas.authentication.AuthenticationEventExecutionPlan;
 import org.apereo.cas.authentication.MultifactorAuthenticationProvider;
 import org.apereo.cas.authentication.surrogate.SurrogateAuthenticationService;
 import org.apereo.cas.configuration.CasConfigurationProperties;
 import 
org.apereo.cas.configuration.model.support.mfa.gauth.LdapGoogleAuthenticatorMultifactorProperties;
-import 
org.apereo.cas.configuration.model.support.mfa.u2f.U2FCoreMultifactorAuthenticationProperties;
 import 
org.apereo.cas.gauth.credential.LdapGoogleAuthenticatorTokenCredentialRepository;
 import org.apereo.cas.oidc.jwks.generator.OidcJsonWebKeystoreGeneratorService;
 import 
org.apereo.cas.otp.repository.credentials.OneTimeTokenCredentialRepository;
@@ -92,7 +86,6 @@ import 
org.apereo.cas.support.saml.idp.metadata.locator.SamlIdPMetadataLocator;
 import 
org.apereo.cas.support.saml.services.idp.metadata.SamlIdPMetadataDocument;
 import 
org.apereo.cas.trusted.authentication.api.MultifactorAuthenticationTrustRecordKeyGenerator;
 import 
org.apereo.cas.trusted.authentication.api.MultifactorAuthenticationTrustStorage;
-import org.apereo.cas.util.DateTimeUtils;
 import org.apereo.cas.util.LdapUtils;
 import org.apereo.cas.util.crypto.CipherExecutor;
 import org.apereo.cas.webauthn.storage.WebAuthnCredentialRepository;
@@ -366,20 +359,6 @@ public class WAContext {
         return new WAWebAuthnCredentialRepository(casProperties, waRestClient);
     }
 
-    @Bean
-    public U2FDeviceRepository u2fDeviceRepository(
-            final CasConfigurationProperties casProperties,
-            final WARestClient waRestClient) {
-
-        U2FCoreMultifactorAuthenticationProperties u2f = 
casProperties.getAuthn().getMfa().getU2f().getCore();
-        OffsetDateTime expirationDate = OffsetDateTime.now().
-                minus(u2f.getExpireDevices(), 
DateTimeUtils.toChronoUnit(u2f.getExpireDevicesTimeUnit()));
-        LoadingCache<String, String> requestStorage = Caffeine.newBuilder().
-                expireAfterWrite(u2f.getExpireRegistrations(), 
u2f.getExpireRegistrationsTimeUnit()).
-                build(key -> StringUtils.EMPTY);
-        return new WAU2FDeviceRepository(casProperties, requestStorage, 
waRestClient, expirationDate);
-    }
-
     @Bean
     public SurrogateAuthenticationService surrogateAuthenticationService(final 
WARestClient waRestClient) {
         return new WASurrogateAuthenticationService(waRestClient);
diff --git 
a/wa/starter/src/main/java/org/apache/syncope/wa/starter/config/WARefreshContextJob.java
 
b/wa/starter/src/main/java/org/apache/syncope/wa/starter/config/WARefreshContextJob.java
index 06a7203064..620c29f754 100644
--- 
a/wa/starter/src/main/java/org/apache/syncope/wa/starter/config/WARefreshContextJob.java
+++ 
b/wa/starter/src/main/java/org/apache/syncope/wa/starter/config/WARefreshContextJob.java
@@ -61,8 +61,8 @@ public class WARefreshContextJob implements Job {
             LOG.info("Generated SAML2 IdP metadata for {}", 
document.getAppliesTo());
 
             advertiseReady();
-        } catch (final Exception e) {
-            throw new JobExecutionException("While generating SAML2 IdP 
metadata", e);
+        } catch (Throwable t) {
+            throw new JobExecutionException("While generating SAML2 IdP 
metadata", t);
         }
     }
 
diff --git 
a/wa/starter/src/main/java/org/apache/syncope/wa/starter/saml/idp/metadata/WASamlIdPMetadataGenerator.java
 
b/wa/starter/src/main/java/org/apache/syncope/wa/starter/saml/idp/metadata/WASamlIdPMetadataGenerator.java
index c9644b930c..7e5ff63ca9 100644
--- 
a/wa/starter/src/main/java/org/apache/syncope/wa/starter/saml/idp/metadata/WASamlIdPMetadataGenerator.java
+++ 
b/wa/starter/src/main/java/org/apache/syncope/wa/starter/saml/idp/metadata/WASamlIdPMetadataGenerator.java
@@ -53,11 +53,6 @@ public class WASamlIdPMetadataGenerator extends 
BaseSamlIdPMetadataGenerator {
                 orElse(SAML2IdPEntityService.DEFAULT_OWNER);
     }
 
-    @Override
-    public SamlIdPMetadataDocument generate(final 
Optional<SamlRegisteredService> registeredService) throws Exception {
-        return super.generate(registeredService);
-    }
-
     @Override
     protected SamlIdPMetadataDocument finalizeMetadataDocument(
             final SamlIdPMetadataDocument doc,
diff --git 
a/wa/starter/src/main/java/org/apache/syncope/wa/starter/u2f/WAU2FDeviceRepository.java
 
b/wa/starter/src/main/java/org/apache/syncope/wa/starter/u2f/WAU2FDeviceRepository.java
deleted file mode 100644
index 178392603c..0000000000
--- 
a/wa/starter/src/main/java/org/apache/syncope/wa/starter/u2f/WAU2FDeviceRepository.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.wa.starter.u2f;
-
-import com.github.benmanes.caffeine.cache.LoadingCache;
-import java.time.OffsetDateTime;
-import java.time.ZoneId;
-import java.util.Collection;
-import java.util.Objects;
-import java.util.stream.Collectors;
-import org.apache.syncope.common.lib.SyncopeClientException;
-import org.apache.syncope.common.lib.types.ClientExceptionType;
-import org.apache.syncope.common.lib.wa.U2FDevice;
-import org.apache.syncope.common.rest.api.beans.U2FDeviceQuery;
-import org.apache.syncope.common.rest.api.service.wa.U2FRegistrationService;
-import org.apache.syncope.wa.bootstrap.WARestClient;
-import org.apereo.cas.adaptors.u2f.storage.BaseU2FDeviceRepository;
-import org.apereo.cas.adaptors.u2f.storage.U2FDeviceRegistration;
-import org.apereo.cas.configuration.CasConfigurationProperties;
-import org.apereo.cas.util.crypto.CipherExecutor;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.util.CollectionUtils;
-
-public class WAU2FDeviceRepository extends BaseU2FDeviceRepository {
-
-    private static final Logger LOG = 
LoggerFactory.getLogger(WAU2FDeviceRepository.class);
-
-    protected static U2FDeviceRegistration parseRegistrationRecord(final 
String owner, final U2FDevice device) {
-        try {
-            return U2FDeviceRegistration.builder().
-                    id(device.getId()).
-                    username(owner).
-                    record(device.getRecord()).
-                    
createdDate(device.getIssueDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate()).
-                    build();
-        } catch (Exception e) {
-            LOG.error(e.getMessage(), e);
-        }
-        return null;
-    }
-
-    protected final WARestClient waRestClient;
-
-    protected final OffsetDateTime expirationDate;
-
-    public WAU2FDeviceRepository(
-            final CasConfigurationProperties casProperties,
-            final LoadingCache<String, String> requestStorage,
-            final WARestClient waRestClient,
-            final OffsetDateTime expirationDate) {
-
-        super(casProperties, requestStorage, 
CipherExecutor.noOpOfSerializableToString());
-        this.waRestClient = waRestClient;
-        this.expirationDate = expirationDate;
-    }
-
-    protected U2FRegistrationService service() {
-        return waRestClient.getService(U2FRegistrationService.class);
-    }
-
-    @Override
-    public Collection<? extends U2FDeviceRegistration> 
getRegisteredDevices(final String owner) {
-        return service().
-                search(new 
U2FDeviceQuery.Builder().owner(owner).expirationDate(expirationDate).build()).getResult().
-                stream().
-                map(device -> parseRegistrationRecord(owner, device)).
-                filter(Objects::nonNull).
-                collect(Collectors.toList());
-    }
-
-    @Override
-    public Collection<? extends U2FDeviceRegistration> getRegisteredDevices() {
-        return service().search(new 
U2FDeviceQuery.Builder().expirationDate(expirationDate).build()).getResult().
-                stream().
-                map(device -> parseRegistrationRecord("", device)).
-                filter(Objects::nonNull).
-                collect(Collectors.toList());
-    }
-
-    @Override
-    public U2FDeviceRegistration registerDevice(final U2FDeviceRegistration 
registration) {
-        U2FDevice record = new U2FDevice.Builder().
-                issueDate(OffsetDateTime.of(
-                        registration.getCreatedDate().atStartOfDay(), 
OffsetDateTime.now().getOffset())).
-                record(registration.getRecord()).
-                id(registration.getId()).
-                build();
-        service().create(registration.getUsername(), record);
-        return parseRegistrationRecord(registration.getUsername(), record);
-    }
-
-    @Override
-    public void deleteRegisteredDevice(final U2FDeviceRegistration 
registration) {
-        service().delete(new 
U2FDeviceQuery.Builder().id(registration.getId()).build());
-    }
-
-    @Override
-    public boolean isDeviceRegisteredFor(final String owner) {
-        try {
-            Collection<? extends U2FDeviceRegistration> devices = 
getRegisteredDevices(owner);
-            return !CollectionUtils.isEmpty(devices);
-        } catch (final SyncopeClientException e) {
-            if (e.getType() == ClientExceptionType.NotFound) {
-                LOG.info("Could not locate account for owner {}", owner);
-            } else {
-                LOG.error(e.getMessage(), e);
-            }
-        }
-        return false;
-    }
-
-    @Override
-    public void clean() {
-        service().delete(new 
U2FDeviceQuery.Builder().expirationDate(expirationDate).build());
-    }
-
-    @Override
-    public void removeAll() {
-        service().delete(new U2FDeviceQuery.Builder().build());
-    }
-}
diff --git 
a/wa/starter/src/test/java/org/apache/syncope/wa/starter/surrogate/WASurrogateAuthenticationServiceTest.java
 
b/wa/starter/src/test/java/org/apache/syncope/wa/starter/surrogate/WASurrogateAuthenticationServiceTest.java
index cea5f004cb..9e20d12dce 100644
--- 
a/wa/starter/src/test/java/org/apache/syncope/wa/starter/surrogate/WASurrogateAuthenticationServiceTest.java
+++ 
b/wa/starter/src/test/java/org/apache/syncope/wa/starter/surrogate/WASurrogateAuthenticationServiceTest.java
@@ -41,7 +41,7 @@ public class WASurrogateAuthenticationServiceTest extends 
AbstractTest {
     private SurrogateAuthenticationService surrogateService;
 
     @Test
-    public void verifyImpersonation() {
+    public void verifyImpersonation() throws Throwable {
         String owner = "syncope-principal";
         ImpersonationAccount account = new ImpersonationAccount.Builder().
                 impersonated("impersonatee").build();


Reply via email to