Gestione di sicurezza, errori, avvisi e logging

In questa sezione analizzeremo i seguenti argomenti:

Sicurezza

Un'origine dati può funzionare in una delle seguenti due modalità di accesso:

  • Nella modalità di accesso limitato, che è l'impostazione predefinita, un'origine dati gestisce solo le richieste che hanno origine dallo stesso dominio di quello in cui si trova l'origine dati. La modalità con restrizioni previene gli attacchi XSRF (Cross-site Request Forgery) ed è quindi più sicura rispetto alla modalità di accesso senza restrizioni. Poiché la libreria delle origini dati fornisce un'interfaccia solo per la restituzione dei dati e non per la modifica dello stato o dei dati sul lato server, sono possibili solo gli attacchi XSRF che tentano di rubare i dati. Per proteggere l'origine dati dai tentativi di furto di dati, devi utilizzare la modalità con restrizioni insieme all'autenticazione basata su cookie. Il modo in cui autentichi gli utenti dipende dall'ambiente e dall'implementazione.

  • In modalità di accesso senza restrizioni, un'origine dati gestisce tutte le richieste, indipendentemente dalla loro origine. Un'origine dati eseguita in modalità senza restrizioni può essere protetta dall'autenticazione basata su cookie, ma tieni presente che l'origine dati sarà vulnerabile agli attacchi XSRF. Utilizza la modalità senza restrizioni se le visualizzazioni su pagine web esterne al dominio dell'origine dati devono accedere all'origine dati o se i dati sono di dominio pubblico e quindi non devono essere protetti.

Una richiesta di visualizzazione può specificare un formato di risposta JSON, CSV o HTML. Il formato della risposta determina il formato in cui un'origine dati restituisce una tabella di dati. Poiché i formati CSV e HTML non sono vulnerabili agli attacchi XSRF, è possibile accedervi da altri domini, anche in modalità con restrizioni.

Per specificare la modalità senza restrizioni, esegui l'override di isRestrictedAccessMode() come segue:

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

Per semplicità, tutti gli esempi forniti con la libreria vengono eseguiti in modalità di accesso senza restrizioni.

Errori e avvisi

Quando non è possibile o desiderabile restituire una tabella di dati valida, la libreria genera un DataSourceException. ad esempio se l'utente non può essere autenticato. La libreria genera queste eccezioni quando gli errori gli impediscono di creare una tabella di dati. Potresti voler creare delle eccezioni nelle situazioni specifiche dell'origine dati. In tal caso, crea i tuoi tipi di eccezioni di errore ereditati dalla classe DataSourceException. Puoi anche creare il corso DataSourceException direttamente.

La classe DataSourceException si trova nel pacchetto base e richiede i seguenti parametri:

  • ReasonType 
    Questo parametro è obbligatorio. I tipi di motivo disponibili sono definiti nell'enumerazione ReasonType. Se nessuno dei tipi di motivi disponibili è adatto, puoi utilizzare Other o Internal.
     
  • MessageToUser 
    Questo parametro definisce il testo del messaggio di errore. Nella maggior parte dei casi, vengono mostrate all'utente come descrizione comando, quindi è importante non includere informazioni tecniche o riservate.

Puoi utilizzare l'insieme di funzioni helper in datasource.DataSourceHelper per gestire gli errori. In questo caso, chiama due funzioni entrambe con lo stesso nome setErrorServletResponse per acquisire un DataSourceException e impostare un errore nella risposta del servlet dei dati. Una di queste funzioni accetta una richiesta dell'origine dati, l'altra accetta un valore HttpServlet request e viene utilizzata nei casi in cui si verifica un errore per la creazione di un DataSourceRequest. Un esempio di implementazione è riportato in Definizione delle funzionalità e flusso di eventi.

Se non è possibile restituire una tabella di dati, la libreria restituisce un errore. Se è possibile restituire una tabella di dati, ma si verifica un problema da segnalare, la libreria restituisce un avviso insieme alla tabella di dati. Ad esempio, la libreria crea un avviso nelle seguenti situazioni:

  • se una visualizzazione con query fornisce un valore LIMIT, che genera dati troncati.
  • se una visualizzazione con query richiede un pattern di formattazione non valido in una clausola FORMAT.

Per aggiungere un avviso personalizzato, crea un'istanza di base.Warning e aggiungila alla tabella dati utilizzando il metodo addWarning().

Logging

La biblioteca utilizza l'estrazione dei dati del Comune di Giacarta. Il logging dei dati comuni di Giacarta può essere utilizzato con i sistemi di registrazione più comuni che potresti già avere. Potresti dover scrivere un adattatore se il tuo sistema di logging non è standard. Per ulteriori dettagli, consulta la home page di logging di Commons di Giacarta.

Quando viene generata un'eccezione, le informazioni vengono inviate al log. La modalità di accesso al log dipende dal sistema di logging utilizzato.