Tratamento de 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 exibe apenas as solicitações do mesmo domínio em que a fonte está localizada. O Modo restrito evita ataques de falsificação de solicitações entre sites (XSRF, na sigla em inglês) e, portanto, é mais seguro do que o modo de acesso irrestrito. Como a biblioteca de fonte de dados fornece uma interface apenas para retornar dados, e não para alterar o estado ou os dados no lado do servidor, apenas ataques XSRF que tentam roubar dados são possíveis. Para tornar 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 ambiente e da implementação.

  • No modo de acesso irrestrito, uma fonte de dados exibe 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 ela ficará vulnerável a ataques XSRF. Use o modo irrestrito se as visualizações em páginas da Web fora do domínio da fonte precisarem acessar a fonte ou se os dados estiverem no domínio público e, portanto, não precisarem ser protegidos.

As solicitações de visualização especificam um formato de resposta JSON, CSV ou HTML. O formato da resposta determina o formato em que uma fonte de dados retorna uma tabela. 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, substitua isRestrictedAccessMode() da seguinte 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 um DataSourceException. Por exemplo, se o usuário não puder ser autenticado. A biblioteca gera essas exceções quando erros impedem a criação de uma tabela de dados. Convém definir exceções em situações exclusivas para sua fonte de dados. Em caso afirmativo, crie seus próprios tipos de exceção de erro, herdando da classe DataSourceException. Você também pode lançar a classe DataSourceException diretamente.

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

  • ReasonType 
    Esse parâmetro é obrigatório. Os tipos de motivo disponíveis são definidos no tipo enumerado 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, ele é exibido para o usuário como uma dica, por isso é importante não incluir informações técnicas ou confidenciais.

Você pode 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 recebe um HttpServlet request e é usada nos casos em que há uma falha na criação de uma DataSourceRequest. Confira um exemplo de implementação em Como definir recursos e o fluxo de eventos.

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

  • quando uma visualização de consulta fornece 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 à sua tabela de dados usando o método addWarning().

Geração de registros

A biblioteca usa a exploração de madeira comum de Jacarta. A geração de registros de Jacarta commons pode ser usada com os sistemas de geração de registros mais comuns que você já usa. Pode ser necessário programar um adaptador se o sistema de registro não for padrão. Para mais detalhes, consulte a página inicial da geração de registros do Jakarta Commons.

Quando uma exceção é lançada, as informações são enviadas para o registro. A maneira de acessar o registro depende do sistema de geração de registros usado.