On 13/02/17 15:03, Violeta Georgieva wrote:
2017-02-13 16:53 GMT+02:00 <ma...@apache.org>:

Author: markt
Date: Mon Feb 13 14:53:37 2017
New Revision: 1782789

URL: http://svn.apache.org/viewvc?rev=1782789&view=rev
Log:
Optional isn't available in Java 7

:( Yep it was introduced with Java 8

Modified:

tomcat/tc8.5.x/trunk/java/org/apache/catalina/authenticator/AuthenticatorBase.java

Modified:
tomcat/tc8.5.x/trunk/java/org/apache/catalina/authenticator/AuthenticatorBase.java
URL:
http://svn.apache.org/viewvc/tomcat/tc8.5.x/trunk/java/org/apache/catalina/authenticator/AuthenticatorBase.java?rev=1782789&r1=1782788&r2=1782789&view=diff

==============================================================================
---
tomcat/tc8.5.x/trunk/java/org/apache/catalina/authenticator/AuthenticatorBase.java
(original)
+++
tomcat/tc8.5.x/trunk/java/org/apache/catalina/authenticator/AuthenticatorBase.java
Mon Feb 13 14:53:37 2017
@@ -23,15 +23,16 @@ import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.Locale;
 import java.util.Map;
-import java.util.Optional;
 import java.util.Set;

 import javax.security.auth.Subject;
+import javax.security.auth.callback.CallbackHandler;
 import javax.security.auth.message.AuthException;
 import javax.security.auth.message.AuthStatus;
 import javax.security.auth.message.MessageInfo;
 import javax.security.auth.message.config.AuthConfigFactory;
 import javax.security.auth.message.config.AuthConfigProvider;
+import javax.security.auth.message.config.ClientAuthConfig;
 import javax.security.auth.message.config.RegistrationListener;
 import javax.security.auth.message.config.ServerAuthConfig;
 import javax.security.auth.message.config.ServerAuthContext;
@@ -88,7 +89,7 @@ import org.apache.tomcat.util.res.String
  * @author Craig R. McClanahan
  */
 public abstract class AuthenticatorBase extends ValveBase
-        implements Authenticator, RegistrationListener {
+implements Authenticator, RegistrationListener {

     private static final Log log =
LogFactory.getLog(AuthenticatorBase.class);

@@ -98,6 +99,8 @@ public abstract class AuthenticatorBase
     private static final String DATE_ONE =
             (new SimpleDateFormat(FastHttpDateFormat.RFC1123_DATE,
Locale.US)).format(new Date(1));

+    private static final AuthConfigProvider NO_PROVIDER_AVAILABLE = new
NoOpAuthConfigProvider();
+
     /**
      * The string manager for this package.
      */
@@ -220,7 +223,7 @@ public abstract class AuthenticatorBase
     protected SingleSignOn sso = null;

     private volatile String jaspicAppContextID = null;
-    private volatile Optional<AuthConfigProvider> jaspicProvider = null;
+    private volatile AuthConfigProvider jaspicProvider = null;


     // -------------------------------------------------------------
Properties
@@ -556,7 +559,7 @@ public abstract class AuthenticatorBase

             if (jaspicProvider == null && !doAuthenticate(request,
response) ||
                     jaspicProvider != null &&
-                            !authenticateJaspic(request, response,
jaspicState, false)) {
+                    !authenticateJaspic(request, response, jaspicState,
false)) {
                 if (log.isDebugEnabled()) {
                     log.debug(" Failed authenticate() test");
                 }
@@ -1187,17 +1190,22 @@ public abstract class AuthenticatorBase


     private AuthConfigProvider getJaspicProvider() {
-        Optional<AuthConfigProvider> provider = jaspicProvider;
-        if (provider == null) {
+        AuthConfigProvider provider = jaspicProvider;
+        if (NO_PROVIDER_AVAILABLE == provider) {
+            return null;
+        } else if (provider == null) {
             provider = findJaspicProvider();
         }
-        return provider.orElse(null);
+        return provider;
     }

-    private Optional<AuthConfigProvider> findJaspicProvider() {
+    private AuthConfigProvider findJaspicProvider() {
         AuthConfigFactory factory = AuthConfigFactory.getFactory();
-        Optional<AuthConfigProvider> provider =
-
 Optional.ofNullable(factory.getConfigProvider("HttpServlet",
jaspicAppContextID, this));
+        AuthConfigProvider provider =
+                factory.getConfigProvider("HttpServlet",
jaspicAppContextID, this);
+        if (provider == null) {
+            provider = NO_PROVIDER_AVAILABLE;
+        }
         jaspicProvider = provider;

I think that here the block should be

          if (provider == null) {
             jaspicProvider = NO_PROVIDER_AVAILABLE;
          } else {
             jaspicProvider = provider;
          }

Otherwise we will return NO_PROVIDER_AVAILABLE and not null

Wdyt?

I think I need to re-order getJaspicProvider(). I also think I need to take another look at the 9.0.x and 8.5.x patch. As currently written, it won't pick up changes from a starting point of registered providers.

Mark




Regards,
Violeta

         return provider;
     }
@@ -1212,4 +1220,24 @@ public abstract class AuthenticatorBase
         public MessageInfo messageInfo = null;
         public ServerAuthContext serverAuthContext = null;
     }
+
+
+    private static class NoOpAuthConfigProvider implements
AuthConfigProvider {
+
+        @Override
+        public ClientAuthConfig getClientAuthConfig(String layer, String
appContext, CallbackHandler handler)
+                throws AuthException {
+            return null;
+        }
+
+        @Override
+        public ServerAuthConfig getServerAuthConfig(String layer, String
appContext, CallbackHandler handler)
+                throws AuthException {
+            return null;
+        }
+
+        @Override
+        public void refresh() {
+        }
+    }
 }
\ No newline at end of file



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org




---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to