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(); +}
