Como lidar com segurança, erros, avisos e geração de registros

Esta seção aborda os seguintes tópicos:

Segurança

Uma fonte de dados pode operar em um dos dois modos de acesso da seguinte maneira:

  • No modo de acesso restrito, que é o padrão, uma fonte de dados atende apenas às solicitações originadas do mesmo domínio em que a fonte está localizada. O modo restrito impede ataques de falsificação de solicitações entre sites (XSRF, na sigla em inglês) e, por isso, é mais seguro que o modo de acesso irrestrito. Como a biblioteca de fontes de dados fornece uma interface apenas para retornar dados, e não para alterar o estado ou os dados no lado do servidor, somente ataques XSRF que tentam roubar dados são possíveis. Para manter sua fonte de dados segura contra tentativas de roubo de dados, o modo restrito precisa ser usado com a autenticação baseada em cookies. A maneira de autenticar os usuários depende do seu ambiente e da implementação.

  • No modo de acesso irrestrito, uma fonte de dados atende a todas as solicitações, independentemente da origem. Uma fonte de dados executada no modo irrestrito pode ser protegida por autenticação baseada em cookies, mas a fonte de dados estará vulnerável a ataques XSRF. Use o modo irrestrito se as visualizações em páginas da Web fora do domínio da fonte de dados precisarem acessar a fonte ou se os dados estiverem em domínio público e não precisarem ser protegidos.

Uma solicitação de visualização pode especificar um formato de resposta JSON, CSV ou HTML. O formato da resposta determina o formato em que uma fonte de dados retorna uma tabela de dados. Como os formatos CSV e HTML não são vulneráveis a ataques XSRF, eles podem ser acessados de outros domínios, mesmo no modo restrito.

Para especificar o modo irrestrito, modifique isRestrictedAccessMode() desta maneira:

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

Para simplificar, todos os exemplos fornecidos com a biblioteca são executados no modo de acesso irrestrito.

Erros e avisos

Quando não é possível, ou desejável, retornar uma tabela de dados válida, a biblioteca gera uma DataSourceException. Por exemplo, se não for possível autenticar o usuário. A biblioteca gera essas exceções quando os erros impedem a criação de uma tabela de dados. Crie exceções em situações exclusivas da sua fonte de dados. Se for o caso, crie seus próprios tipos de exceção de erro herdando da classe DataSourceException. Também é possível gerar a classe DataSourceException diretamente.

A classe DataSourceException está localizada no pacote base. Ela usa os seguintes parâmetros:

  • ReasonType
    Esse parâmetro é obrigatório. Os tipos de motivo disponíveis são definidos na enumeração ReasonType. Se nenhum dos tipos de motivo disponíveis for adequado, use Other ou Internal.
     
  • MessageToUser
    Esse parâmetro define o texto da mensagem de erro. Na maioria dos casos, ela é exibida ao usuário como uma dica. Portanto, é importante não incluir informações técnicas ou confidenciais.

É possível usar o conjunto de funções auxiliares em datasource.DataSourceHelper para processar erros. Nesse caso, chame duas funções com o mesmo nome de setErrorServletResponse para receber um DataSourceException e definir um erro na resposta do servlet de dados. Uma dessas funções recebe uma solicitação de fonte de dados, a outra usa um HttpServlet request e é usada nos casos em que há uma falha ao criar uma DataSourceRequest. Um exemplo de implementação é fornecido em Como definir recursos e o fluxo de eventos.

Se não for possível retornar uma tabela de dados, a biblioteca retornará um erro. Se for possível retornar uma tabela de dados, mas houver um problema para informar, a biblioteca vai retornar um aviso com a tabela de dados. Por exemplo, a biblioteca cria um aviso nas seguintes situações:

  • se uma visualização de consulta fornecer um LIMIT que resulta em dados truncados.
  • se uma visualização de consulta solicitar um padrão de formatação inválido em uma cláusula FORMAT.

Para adicionar seu próprio aviso, crie uma instância de base.Warning e adicione-a à tabela de dados usando o método addWarning().

Geração de registros

A biblioteca usa registros comuns de Jacarta. A geração de registros comuns de Jacarta pode ser usada com a maioria dos sistemas de geração de registros que você já usa. Se o sistema de geração de registros não for padrão, talvez seja necessário programar um adaptador. Para mais detalhes, consulte a página inicial de geração de registros do Common Jack (em inglês).

Quando uma exceção é lançada, as informações são enviadas ao registro. A maneira de acessar o registro depende do sistema de geração de registros que você usa.