docs: @Override
      protected int beforeHandle(final Request request, final Response response)
      {
          this.log.debug("Calling isLoggingIn");
          if(this.isLoggingIn(request, response))
          {
              this.log.debug("Calling isLoggingIn");
              this.login(request, response);
              if(this.authenticate(request, response))
              {
                  this.log.debug("Calling authenticated");
                  this.authenticated(request, response);
              }
              // we redirect after logging in for all cases, so stop here and return the 303 response
              return Filter.STOP;
          }
          else if(this.isLoggingOut(request, response))
          {
              this.log.debug("Calling logout");
              return this.logout(request, response);
          }
          
          // log.info("calling super.beforeHandle");
          // return super.beforeHandle(request, response);
          
          this.log.debug("Calling copy of Authenticator beforeHandle");
          
          if(
          // FIXME: How important is multiAuthenticating to this class?
          // isMultiAuthenticating() ||
          !request.getClientInfo().isAuthenticated())
          {
              this.log.debug("Calling authenticate");
              if(this.authenticate(request, response))
              {
                  this.log.debug("Calling authenticated");
                  return this.authenticated(request, response);
              }
              else if(this.isOptional())
              {
                  this.log.debug("Authentication isOptional, returning CONTINUE with Status.SUCCESS_OK");
                  response.setStatus(Status.SUCCESS_OK);
                  return Filter.CONTINUE;
              }
              else
              {
                  this.log.debug("Calling unauthenticated");
                  return this.unauthenticated(request, response);
              }
          }
          else
          {
              this.log.debug("Returning CONTINUE");
              return Filter.CONTINUE;
          }
      }