Gestione di sicurezza, errori, avvisi e logging

In questa sezione analizzeremo i seguenti argomenti:

Sicurezza

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

  • In modalità di accesso limitato, che è l'impostazione predefinita, un'origine dati gestisce solo le richieste che provengono dallo stesso dominio in cui si trova l'origine dati. La Modalità con restrizioni previene gli attacchi di gerarchia di richieste da più siti (XSRF) ed è quindi più sicura della modalità di accesso senza limitazioni. Poiché la libreria dell'origine dati fornisce un'interfaccia per restituire solo i dati e non per modificare lo stato o i dati lato server, sono possibili solo attacchi XSRF che tentano di rubare i dati. Per proteggere l'origine dati dai tentativi di rubare dati, è necessario utilizzare la modalità con restrizioni insieme all'autenticazione basata sui cookie. Il modo in cui autentichi gli utenti dipende dal tuo ambiente e dalla tua implementazione.

  • In modalità di accesso senza restrizioni, un'origine dati soddisfa tutte le richieste indipendentemente dalla sua origine. Un'origine dati eseguita in modalità senza restrizioni può essere protetta tramite autenticazione basata su cookie, ma tieni presente che l'origine dati sarà vulnerabile agli attacchi XSRF. Utilizza la modalità senza restrizioni se le visualizzazioni di pagina web all'esterno del dominio dell'origine dati devono accedere a quest'ultima o se i dati si trovano nel dominio pubblico e pertanto non devono essere protetti.

Una richiesta di visualizzazione può specificare un formato di risposta in formato 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, sostituisci isRestrictedAccessMode() come segue:

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

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

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 impediscono la creazione di una tabella di dati. Potresti creare eccezioni in situazioni specifiche dell'origine dati. In questo caso, crea i tuoi tipi di eccezioni per gli errori ereditando dalla classe DataSourceException. Puoi anche avviare direttamente il corso DataSourceException.

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

  • ReasonType
    Questo parametro è obbligatorio. I tipi di motivi 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, viene mostrata 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 con lo stesso nome di setErrorServletResponse per effettuare un DataSourceException e impostare un errore nella risposta del server di dati. Una di queste funzioni accetta una richiesta di origine dati, l'altra utilizza un elemento HttpServlet request e viene utilizzata nei casi in cui si è verificato un errore durante la creazione di un elemento DataSourceRequest. Un implementazione di esempio è disponibile in Definizione delle funzionalità e del 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 è verificato 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 di query fornisce un LIMIT che risulta in dati troncati.
  • se una visualizzazione delle query richiede un pattern di formattazione non valido in una clausola FORMAT.

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

Logging

La biblioteca utilizza il diario comune di Giacarta. Il logging di Giacarta Common può essere utilizzato con i sistemi di logging più comuni che potresti già aver implementato. Potrebbe essere necessario scrivere un adattatore se il sistema di logging non è standard. Per ulteriori dettagli, consulta la home page del logging di Giacarta.

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