Pergunta

Eu tenho um cliente Java que precisa acessar um banco de dados remoto. É o objetivo de credenciais hide banco de dados do usuário e não codificar as credenciais dentro do código. Portanto, o acesso ao banco provavelmente terá que ser no lado do servidor.

Estou restrito ao uso Ibatis como um quadro de abstração de dados. Além de que tenho JBoss em execução no servidor web, permitindo-me a usar fontes de dados.

Como você projetar o acesso remoto banco de dados e os dados de serialização / desserialização. prefere serviços web de algum tipo de fluxo de dados através de um socket? Como você perceber qualquer um dos dois?

Foi útil?

Solução

Criar uma camada de serviço e expô-la ao longo do RMI - possivelmente como EJB3 beans de sessão sem estado como você tem JBoss, possivelmente como pura RMI. Eu não me preocupei com serviços web a menos que você tenha uma necessidade específica. RMI levará caso de serialização para você.

As suas necessidades camada de serviço para expor um método para usuários autenticar usando suas credenciais inseridas na inicialização do aplicativo Swing. Todas as chamadas para os dados de passar pela camada de serviço. No SQL existe no aplicativo Swing.

Existem outros benfits desta excepção apenas escondendo as credenciais de banco de dados arranjo. Não só você acabar com uma arquitetura em camadas, mas você ganhar eficiência da partilha de declarações preparadas, entre todos os seus clientes por ter uma única fonte de dados no servidor.

Outras dicas

Assim que você quer que os usuários possam acessar o banco de dados sem saber as credenciais? Sua única opção é acessar banco de dados do lado do servidor. Infelizmente não há nenhuma maneira de esconder o nome de usuário e senha em Java -. Se você colocá-lo em um arquivo de propriedades e criptografá-lo, um determinado invasor ainda pode anexar um depurador e ver o que os valores são mantidos em seu código

Além disso, a menos que você está se conectando a DB através de uma conexão segura alguém poderia executar um packet sniffer como o tcpdump e obter as credenciais lá.

Você diz que você está executando um servidor JBoss, o que poderia ser melhor é a criação de EJBs remotos para que seu aplicativo cliente não acessar o banco de dados diretamente - ele tem que ir através de seus métodos EJB. (Ele não tem que ser EJB, pelo jeito, você poderia fazer algo como serviços web, se você preferir).

O ponto é, suas conversas servidor para o databas diretamente, e apenas o acesso do seu cliente é através de um conjunto limitado de interfaces você define no servidor.

Como já foi dito, você tem que se conectar a um servidor que lida com a conexão de banco de dados. Não há nenhuma maneira para prevenir alguém de quebrar a sua segurança, com 30 minutos de esforço.

Se os clientes estão conectando um tanto localmente, dentro de uma intranet, utilizando EJB em seu appserver é provavelmente a melhor escolha ... embora você provavelmente vai querer beans de sessão sem estado, eu não tomaria Beans controlados por mensagem necessariamente desconto.

Para distâncias maiores, onde o tráfego está vindo de fora, eu usaria webservices mais de HTTPS

Em qualquer caso, a maioria dos appservers ter mecanismos para expor sua EJB é como webservices, com o WSDL; e há cerca de uma centena de utilitários para gerar clientes, para chamar o webservice, a partir de um WSDL (wsdl2java do eixo funciona bem o suficiente)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top