Cómo manejar la seguridad, los errores, las advertencias y los registros

Esta sección incluye los siguientes temas:

Seguridad

Una fuente de datos puede operar en uno de estos dos modos de acceso:

  • En el modo de acceso restringido, que es el predeterminado, una fuente de datos solo entrega las solicitudes que se originan en el mismo dominio en el que se encuentra la fuente de datos. El modo restringido evita los ataques de falsificación de solicitudes entre sitios (XSRF), por lo que es más seguro que el modo de acceso sin restricciones. Debido a que la biblioteca de fuente de datos proporciona una interfaz para mostrar solo datos, y no para cambiar el estado o los datos del lado del servidor, solo son posibles los ataques XSRF que intentan robar datos. Para que tu fuente de datos esté protegida contra intentos de robo de datos, el modo restringido se debe usar junto con la autenticación basada en cookies. La forma de autenticar a los usuarios depende de tu entorno y de la implementación.

  • En el modo de acceso sin restricciones, una fuente de datos entrega todas las solicitudes, sin importar su origen. Una fuente de datos que se ejecuta en modo no restringido puede estar protegida por la autenticación basada en cookies, pero ten en cuenta que la fuente de datos será vulnerable a los ataques XSRF. Usa el modo sin restricciones si las visualizaciones en páginas web fuera del dominio de la fuente de datos necesitan acceder a la fuente de datos o si los datos son de dominio público y, por lo tanto, no necesitan estar protegidos.

Una solicitud de visualización puede especificar un formato de respuesta de JSON, CSV o HTML. El formato de respuesta determina el formato en el que una fuente de datos muestra una tabla de datos. Debido a que los formatos CSV y HTML no son vulnerables a los ataques de XSRF, se puede acceder a ellos desde otros dominios, incluso en modo restringido.

Para especificar el modo sin restricciones, anula isRestrictedAccessMode() de la siguiente manera:

  @Override
  protected boolean isRestrictedAccessMode() {
    return false;
  }

Para simplificar, todos los ejemplos proporcionados con la biblioteca se ejecutan en modo de acceso ilimitado.

Errores y advertencias

Cuando no es posible, o no se recomienda, mostrar una tabla de datos válida, la biblioteca arroja una DataSourceException. Por ejemplo, si el usuario no se puede autenticar. La biblioteca genera estas excepciones cuando los errores impiden que se cree una tabla de datos. Es posible que quieras generar excepciones en situaciones únicas para tu fuente de datos. Si es así, crea tus propios tipos de excepciones de error mediante la herencia de la clase DataSourceException. También puedes arrojar la clase DataSourceException directamente.

La clase DataSourceException se encuentra en el paquete base y toma los siguientes parámetros:

  • ReasonType
    Este parámetro es obligatorio. Los tipos de motivos disponibles se definen en la enumeración ReasonType. Si ninguno de los tipos de motivos disponibles es adecuado, puedes usar Other o Internal.
     
  • MessageToUser
    Este parámetro define el texto del mensaje de error. En la mayoría de los casos, se muestra al usuario como información sobre la herramienta, por lo que es importante no incluir información técnica o confidencial.

Puedes usar el conjunto de funciones auxiliares en datasource.DataSourceHelper para manejar los errores. En este caso, llama a dos funciones con el mismo nombre de setErrorServletResponse para tomar un DataSourceException y establecer un error en la respuesta del servlet de datos. Una de estas funciones toma una solicitud de fuente de datos, la otra toma una HttpServlet request y se usa en casos en los que no se puede crear una DataSourceRequest. Puedes encontrar una implementación de ejemplo en Cómo definir capacidades y el flujo de eventos.

Si no es posible mostrar una tabla de datos, la biblioteca muestra un error. Si es posible mostrar una tabla de datos, pero hay un problema para informar, la biblioteca muestra una advertencia junto con la tabla de datos. Por ejemplo, la biblioteca crea una advertencia en las siguientes situaciones:

  • si una visualización de consulta proporciona un LIMIT que genera datos truncados
  • si una visualización de consulta solicita un patrón de formato no válido en una cláusula FORMAT.

Para agregar tu propia advertencia, crea una instancia de base.Warning y agrégala a tu tabla de datos mediante el método addWarning().

Registro

La biblioteca usa el registro de Common de Yakarta. El registro de Common de Yakarta se puede usar con la mayoría de los sistemas de registro comunes que ya tienes. Es posible que debas escribir un adaptador si tu sistema de registro no es estándar. Para obtener más detalles, consulta la página de inicio de registro de los Common de Yakarta.

Cuando se envía una excepción, la información se envía al registro. La forma en la que accedes al registro depende del sistema de registro que usas.