You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2017/02/13 14:53:37 UTC

svn commit: r1782789 - /tomcat/tc8.5.x/trunk/java/org/apache/catalina/authenticator/AuthenticatorBase.java

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

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;
         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-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org


Re: svn commit: r1782789 - /tomcat/tc8.5.x/trunk/java/org/apache/catalina/authenticator/AuthenticatorBase.java

Posted by Mark Thomas <ma...@apache.org>.
On 13/02/17 15:55, Mark Thomas wrote:

> ... 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 *no* registered providers.

Handling the case where there the system starts with no registered 
providers and then adds them some point later is going to require 
tracking RegistrationListener implementations even when no 
AuthConfigProvider is returned.

The spec suggests that shouldn't happen and it could well trigger 
unexpected behaviour. On that basis I'm going to leave the code as-is 
for now.

Mark

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


Re: svn commit: r1782789 - /tomcat/tc8.5.x/trunk/java/org/apache/catalina/authenticator/AuthenticatorBase.java

Posted by Mark Thomas <ma...@apache.org>.
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-unsubscribe@tomcat.apache.org
>> For additional commands, e-mail: dev-help@tomcat.apache.org
>>
>


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


Re: svn commit: r1782789 - /tomcat/tc8.5.x/trunk/java/org/apache/catalina/authenticator/AuthenticatorBase.java

Posted by Violeta Georgieva <mi...@gmail.com>.
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?

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-unsubscribe@tomcat.apache.org
> For additional commands, e-mail: dev-help@tomcat.apache.org
>