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çãoReasonType
. Se nenhum dos tipos de motivo disponíveis for adequado, useOther
ouInternal
.
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.