Hora de disponibilizar a aplicação Swing pela rede (Java Web Starter)

1 resposta
J

olá a todos,
tenho uma aplicação desktop com Swing e estava prestes a disponibiliza-lá pela rede (com o Java Web Starter) mas,
utilizo o hibernate e obviamente, tenho um arquivo de configuracao XML contendo dados muito importante (URL, usuario e senha do banco de dados)
entao, percebi que não haveria segurança, uma vez que a aplicação, o JAR, poderia ser descompacto e … não seria bom! :wink:
alguém tem alguma solução ou idéia de como disponibilizar a mesma de forma segura?!?
valeu!

1 Resposta

flaviorgiron

Olá Josueh.

Resolvemos este problema colocando os itens importantes em uma classe que retorna um Map com este parametros que são utilizados para a createEntityManagerFactory., retirando assim do xml.

Veja se isto pode ter auxiliar, e retorne, se deu certo, ou a melhor maneira que vc encontrou para resovler este problema.

Neste exemplo é feito também a leitura de um arquivo .properties que contém informações do caminho do banco, porta e servidor, utiliza o FIREBIRD.

Porém usuário e senha são definidos em uma classe.

Caso alguém tiver um comentário, ou sugestão de melhoria tb agradeço.

Grato.

Persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
  <persistence-unit name="SisClinicaPU" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <class>as.com.sisclinica.model.Auditoria</class>
    <properties>
      <property name="hibernate.connection.driver_class" value="org.firebirdsql.jdbc.FBDriver"/>
      <property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>
      <property name="hibernate.dialect" value="org.hibernate.dialect.FirebirdDialect"/>
      <property name="hibernate.connection.autocommit" value="false"/>
      <property name="hibernate.show_sql" value="false"/>
      <property name="hibernate.format_sql" value="false"/>
      <property name="hibernate.connection.lc_ctype" value="WIN1252"/>
    </properties>
  </persistence-unit>
</persistence>

EntitySingleTon.java

package as.com.sisclinica.dao;

import javax.persistence.EntityManager;
import javax.persistence.Persistence;

public class EntitySingleTon {

    private static EntityManager instance;

    private EntitySingleTon() {
        instance = Persistence.createEntityManagerFactory("SisClinicaPU", SearchLocationDB.buscarURL()).createEntityManager();
    }

    @SuppressWarnings("static-access")
    public static EntityManager getInstancia() {
        if (instance == null) {
            EntitySingleTon singleTon = new EntitySingleTon();
            return singleTon.instance;
        }
        return instance;
    }
}

SearchLocationDB.java

package as.com.sisclinica.dao;

import as.com.sisclinica.gui.JMessage.JConfirmMessage;
import java.io.FileInputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;

public class SearchLocationDB {

    public static Map buscarURL() {
        try {
            Properties properties = new Properties();
            FileInputStream fis = new FileInputStream("locationDB.properties");
            properties.load(fis);
            fis.close();
            Map prop = new HashMap();
            //lc_ctype=WIN1252  --> Necesario para a codificação da acentuação no realtorios
            //defaultResultSetHoldable=True  --> Necessario para relatorios com subrelatorios(receita) --> problema encontrado com o jaybird
            prop.put("hibernate.connection.url", "jdbc:firebirdsql:" + properties.getProperty("url") + "/" + properties.getProperty("porta") + ":" + properties.getProperty("caminho") + "?defaultResultSetHoldable=True;lc_ctype=WIN1252");
            
            //parametros para usuário e senha do DB.
            prop.put("hibernate.connection.username", "SYSDBA");
            prop.put("hibernate.connection.password", "masterkey");
            return prop;
        } catch (Exception e) {
            JConfirmMessage.showMessageDialog("Arquivo para caminho do banco de dados não encontrado!!!", "Atenção");
            Logger.getLogger(EntitySingleTon.class.getName()).log(Level.SEVERE, null, e);
            System.exit(0);
            return null;

        }
    }
}
Criado 2 de novembro de 2009
Ultima resposta 3 de nov. de 2009
Respostas 1
Participantes 2