code: @Override
      public Result call(Authenticated configuration, RequestContext context) throws Exception {
          Authenticator authenticator = getAuthenticator(context, configuration.value());
          if (authenticator != null) {
              String username = authenticator.getUserName(context.context());
              if (username == null) {
                  // We cut the interception chain on purpose.
                  context.context().request().setUsername(null);
                  return authenticator.onUnauthorized(context.context());
              } else {
                  // Set the username.
                  context.context().request().setUsername(username);
                  return context.proceed();
              }
          } else {
              context.context().request().setUsername(null);
              // No authenticator
              return Results.unauthorized();
          }
      }
docs: Intercepts the action, and checks if the current request is authenticated.
  the results depends on two factors: if the request is authenticated and the availability of authenticator.
  <p>
  If there are no authenticator, it returns a unauthorized response.
  If there are an authenticator matching the set ones (in the annotation), use it. If the authenticator cannot
  authenticate the request, it will be used to get the unauthorized response.
  If these are no authenticator matching the request, it returns an unauthorized response.
  <p>
  If the annotation does not specify the authenticator, it uses the first one. If several ones are available,
  a warning is thrown.
  
  @param configuration the authenticated annotation instance
  @param context       the interception context
  @return the result
  @throws Exception if anything bad happen