diff --git a/build-parent/pom.xml b/build-parent/pom.xml
index 07ea30f380197..20540c9c2d677 100644
--- a/build-parent/pom.xml
+++ b/build-parent/pom.xml
@@ -27,6 +27,8 @@
2.12.8
4.1.1
+ 2.22.1
+
@@ -155,6 +157,7 @@
maven-surefire-plugin
+ ${surefire-plugin.version}
org.jboss.logmanager.LogManager
diff --git a/extensions/resteasy/deployment/pom.xml b/extensions/resteasy/deployment/pom.xml
index 993ae24efdb8c..98bf7d5eedc5a 100644
--- a/extensions/resteasy/deployment/pom.xml
+++ b/extensions/resteasy/deployment/pom.xml
@@ -84,6 +84,12 @@
+
+ maven-surefire-plugin
+
+ false
+
+
diff --git a/extensions/security/deployment/pom.xml b/extensions/security/deployment/pom.xml
index 322540a475518..217e2e2bc7c4a 100644
--- a/extensions/security/deployment/pom.xml
+++ b/extensions/security/deployment/pom.xml
@@ -53,6 +53,15 @@
+
+ maven-surefire-plugin
+
+
+ org.jboss.logmanager.LogManager
+
+ false
+
+
diff --git a/extensions/security/deployment/src/main/java/io/quarkus/security/deployment/SecurityProcessor.java b/extensions/security/deployment/src/main/java/io/quarkus/security/deployment/SecurityProcessor.java
index c497423574a0b..f499ce3f5298b 100644
--- a/extensions/security/deployment/src/main/java/io/quarkus/security/deployment/SecurityProcessor.java
+++ b/extensions/security/deployment/src/main/java/io/quarkus/security/deployment/SecurityProcessor.java
@@ -1,22 +1,43 @@
package io.quarkus.security.deployment;
+import java.lang.reflect.Method;
import java.security.Provider;
import java.security.Security;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
+import java.util.Map;
import java.util.Set;
+import org.jboss.jandex.AnnotationInstance;
+import org.jboss.jandex.AnnotationValue;
+import org.jboss.jandex.ClassInfo;
+import org.jboss.jandex.DotName;
+import org.jboss.jandex.MethodInfo;
+import org.jboss.jandex.Type;
import org.jboss.logging.Logger;
import io.quarkus.arc.deployment.AdditionalBeanBuildItem;
import io.quarkus.arc.deployment.AnnotationsTransformerBuildItem;
+import io.quarkus.arc.deployment.BeanRegistrarBuildItem;
import io.quarkus.arc.deployment.InterceptorBindingRegistrarBuildItem;
+import io.quarkus.arc.processor.AnnotationStore;
+import io.quarkus.arc.processor.BeanConfigurator;
+import io.quarkus.arc.processor.BeanRegistrar;
+import io.quarkus.arc.processor.BuildExtension;
+import io.quarkus.arc.processor.BuiltinScope;
import io.quarkus.deployment.Capabilities;
import io.quarkus.deployment.annotations.BuildProducer;
import io.quarkus.deployment.annotations.BuildStep;
+import io.quarkus.deployment.builditem.ApplicationIndexBuildItem;
import io.quarkus.deployment.builditem.FeatureBuildItem;
import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
+import io.quarkus.gizmo.MethodCreator;
+import io.quarkus.gizmo.MethodDescriptor;
+import io.quarkus.gizmo.ResultHandle;
import io.quarkus.security.runtime.IdentityProviderManagerCreator;
import io.quarkus.security.runtime.SecurityBuildTimeConfig;
import io.quarkus.security.runtime.SecurityIdentityAssociation;
@@ -25,6 +46,8 @@
import io.quarkus.security.runtime.interceptor.DenyAllInterceptor;
import io.quarkus.security.runtime.interceptor.PermitAllInterceptor;
import io.quarkus.security.runtime.interceptor.RolesAllowedInterceptor;
+import io.quarkus.security.runtime.interceptor.SecurityCheckStorage;
+import io.quarkus.security.runtime.interceptor.SecurityCheckStorageBuilder;
import io.quarkus.security.runtime.interceptor.SecurityConstrainer;
import io.quarkus.security.runtime.interceptor.SecurityHandler;
@@ -84,6 +107,145 @@ void registerSecurityInterceptors(BuildProducer beanRegistrars,
+ ApplicationIndexBuildItem indexBuildItem) {
+
+ beanRegistrars.produce(new BeanRegistrarBuildItem(new BeanRegistrar() {
+
+ @Override
+ public void register(RegistrationContext registrationContext) {
+ Map methodAnnotations = gatherSecurityAnnotations(indexBuildItem,
+ registrationContext);
+
+ DotName name = DotName.createSimple(SecurityCheckStorage.class.getName());
+
+ BeanConfigurator