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

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

commit f4b8c03e2261f1797a8bd920fcd98c52a2b56c97
Author: Roberto Cortez <[email protected]>
AuthorDate: Thu Dec 27 18:08:37 2018 +0000

    TOMEE-2365 - Added way to inject LoginToContinue when required by the 
specific AuthenticationMechanism.
---
 .../security/cdi/FormAuthenticationMechanism.java  | 13 +++++++++++-
 .../tomee/security/cdi/TomEESecurityExtension.java | 21 ++++++++++++++++++++
 .../security/http/LoginToContinueMechanism.java    | 23 ++++++++++++++++++++++
 3 files changed, 56 insertions(+), 1 deletion(-)

diff --git 
a/tomee/tomee-security/src/main/java/org/apache/tomee/security/cdi/FormAuthenticationMechanism.java
 
b/tomee/tomee-security/src/main/java/org/apache/tomee/security/cdi/FormAuthenticationMechanism.java
index 316575e..8846a7a 100644
--- 
a/tomee/tomee-security/src/main/java/org/apache/tomee/security/cdi/FormAuthenticationMechanism.java
+++ 
b/tomee/tomee-security/src/main/java/org/apache/tomee/security/cdi/FormAuthenticationMechanism.java
@@ -16,7 +16,10 @@
  */
 package org.apache.tomee.security.cdi;
 
+import org.apache.tomee.security.http.LoginToContinueMechanism;
+
 import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Inject;
 import javax.security.enterprise.AuthenticationException;
 import javax.security.enterprise.AuthenticationStatus;
 import 
javax.security.enterprise.authentication.mechanism.http.HttpAuthenticationMechanism;
@@ -24,10 +27,14 @@ import 
javax.security.enterprise.authentication.mechanism.http.HttpMessageContex
 import javax.security.enterprise.authentication.mechanism.http.LoginToContinue;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.util.function.Supplier;
 
 @ApplicationScoped
 @LoginToContinue
-public class FormAuthenticationMechanism implements 
HttpAuthenticationMechanism {
+public class FormAuthenticationMechanism implements 
HttpAuthenticationMechanism, LoginToContinueMechanism {
+    @Inject
+    private Supplier<LoginToContinue> loginToContinue;
+
     @Override
     public AuthenticationStatus validateRequest(final HttpServletRequest 
request, final HttpServletResponse response,
                                                 final HttpMessageContext 
httpMessageContext)
@@ -47,4 +54,8 @@ public class FormAuthenticationMechanism implements 
HttpAuthenticationMechanism
                              final HttpMessageContext httpMessageContext) {
         throw new UnsupportedOperationException();
     }
+
+    public LoginToContinue getLoginToContinue() {
+        return loginToContinue.get();
+    }
 }
diff --git 
a/tomee/tomee-security/src/main/java/org/apache/tomee/security/cdi/TomEESecurityExtension.java
 
b/tomee/tomee-security/src/main/java/org/apache/tomee/security/cdi/TomEESecurityExtension.java
index f0214d1..2fb9ef5 100644
--- 
a/tomee/tomee-security/src/main/java/org/apache/tomee/security/cdi/TomEESecurityExtension.java
+++ 
b/tomee/tomee-security/src/main/java/org/apache/tomee/security/cdi/TomEESecurityExtension.java
@@ -32,11 +32,14 @@ import javax.enterprise.inject.spi.BeforeBeanDiscovery;
 import javax.enterprise.inject.spi.Extension;
 import javax.enterprise.inject.spi.ProcessAnnotatedType;
 import javax.enterprise.inject.spi.WithAnnotations;
+import javax.enterprise.util.TypeLiteral;
 import 
javax.security.enterprise.authentication.mechanism.http.BasicAuthenticationMechanismDefinition;
 import 
javax.security.enterprise.authentication.mechanism.http.FormAuthenticationMechanismDefinition;
 import 
javax.security.enterprise.authentication.mechanism.http.HttpAuthenticationMechanism;
+import javax.security.enterprise.authentication.mechanism.http.LoginToContinue;
 import java.util.HashSet;
 import java.util.Set;
+import java.util.function.Supplier;
 
 public class TomEESecurityExtension implements Extension {
     private final Set<AnnotatedType> basicAuthentication = new HashSet<>();
@@ -90,9 +93,20 @@ public class TomEESecurityExtension implements Extension {
                     });
         }
 
+        // TODO - Support multiple here
         if (!formAuthentication.isEmpty()) {
             afterBeanDiscovery
                     .addBean()
+                    .id(Supplier.class.getName() + "#" + 
LoginToContinue.class.getName())
+                    .beanClass(Supplier.class)
+                    .addType(Object.class)
+                    .addType(new TypeLiteral<Supplier<LoginToContinue>>() {})
+                    .qualifiers(Default.Literal.INSTANCE, Any.Literal.INSTANCE)
+                    .scope(ApplicationScoped.class)
+                    .createWith(creationalContext -> 
createLoginToContinueSupplier());
+
+            afterBeanDiscovery
+                    .addBean()
                     .id(FormAuthenticationMechanism.class.getName())
                     .beanClass(FormAuthenticationMechanism.class)
                     .types(Object.class, HttpAuthenticationMechanism.class, 
FormAuthenticationMechanism.class)
@@ -114,4 +128,11 @@ public class TomEESecurityExtension implements Extension {
     public boolean hasAuthenticationMechanisms() {
         return !basicAuthentication.isEmpty();
     }
+
+    private Supplier<LoginToContinue> createLoginToContinueSupplier() {
+        return () -> formAuthentication.iterator()
+                               .next()
+                               
.getAnnotation(FormAuthenticationMechanismDefinition.class)
+                               .loginToContinue();
+    }
 }
diff --git 
a/tomee/tomee-security/src/main/java/org/apache/tomee/security/http/LoginToContinueMechanism.java
 
b/tomee/tomee-security/src/main/java/org/apache/tomee/security/http/LoginToContinueMechanism.java
new file mode 100644
index 0000000..fe5fccd
--- /dev/null
+++ 
b/tomee/tomee-security/src/main/java/org/apache/tomee/security/http/LoginToContinueMechanism.java
@@ -0,0 +1,23 @@
+/*
+ * 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.tomee.security.http;
+
+import javax.security.enterprise.authentication.mechanism.http.LoginToContinue;
+
+public interface LoginToContinueMechanism {
+    LoginToContinue getLoginToContinue();
+}

Reply via email to