quarta-feira, 10 de novembro de 2010

Recuperando Senha do Banco de Dados Access 2000


Contador de acessoVisitas


Já aconteceu comigo e provavelmente com você que está lendo. Incluir uma senha em um banco de dados Access 2000 e depois não recordar. Por isso, e por didática, resolvi postar o código em Visual Basic 6.0.

Veja Também Recuperando Senha do Banco de Dados Access 97

Vou considerar um Form com uma caixa de texto onde será colocado o caminho completo da base de dados. Um Botão que executará a quebra da senha e um rótulo que mostrará a senha.

No evento on_Click do botão, incluiremos o código.


Private Sub Command1_Click()
   Label1.Caption = DescobreSenha2000(Text1.Text)
End Sub


Crie um módulo e inclua o código abaixo.


'Tamanho máximo da senha compila, onde cada caracter da senha
'estará representado pelo seu repectivo código ASC em hexadecimal
Const LEN_PWD_COMPILED = 20 * 2

Const OFFSET_PWD_INTERVAL = 4
Const OFFSET_PWD_COMPILED = 66

'Posição no arquivo onde começa a senha
Const OFFSET_XOR_GET = OFFSET_PWD_COMPILED + LEN_PWD_COMPILED - OFFSET_PWD_INTERVAL

'Valor padrão usado na conversão da senha
Const VAL_XOR_FIX = &H2A7DA8A8

Public Function DescobreSenha2000(ByVal FileName As String) As String
   On Error GoTo Erro
   Dim New_Xor_Val As Long
   Dim New_Xor_Char As Variant
   Dim i As Long
   Dim NewPassword As String
   Dim Part_Char As String
   Dim Part_Char_Hex As String

   Dim texto As String
   Dim arq As Long
   'Abrindo o arquivo é pegando os (OFFSET_XOR_GET + 5) primeiros bytes, pois é onde se encontrará a senha
   arq = FreeFile
   Open FileName For Binary As arq
   texto = String(OFFSET_XOR_GET + 1 + OFFSET_PWD_INTERVAL, " ")
   Get #arq, 1, texto
   Close arq

   New_Xor_Val = CompileVal(Mid(texto, OFFSET_XOR_GET + 1, OFFSET_PWD_INTERVAL)) Xor VAL_XOR_FIX

   'Array padrão usado para decodificar a senha
   New_Xor_Char = Array(&H37EDE6BC, &HFA9D5967, &HE62943FC, &H608BAB29, &H367A896E, &HB1DE6FCF, &H4312E94D, &H33B0B2F5, &H5B787C0E, &H2A7DA8A8)

   For i = 1 To LEN_PWD_COMPILED / OFFSET_PWD_INTERVAL
      Part_Char = Mid(texto, OFFSET_PWD_COMPILED + (i - 1) * OFFSET_PWD_INTERVAL + 1, OFFSET_PWD_INTERVAL)
      Part_Char_Hex = AlnRight(Hex((CompileVal(Part_Char) Xor New_Xor_Val) Xor New_Xor_Char(i - 1)), 2 * OFFSET_PWD_INTERVAL)
      NewPassword = Chr(HexToLng(Mid(Part_Char_Hex, 1, 4))) & Chr(HexToLng(Mid(Part_Char_Hex, 5, 4))) & NewPassword
   Next

   DescobreSenha2000 = StrReverse(Replace(NewPassword, Chr(0), ""))
   Exit Function
Erro:
   MsgBox "Erro: " & Err.Number & " - " & Err.Description
   DescobreSenha2000 = "Erro na descoberta da senha"
End Function

'Compila o texto passado de acordo com a regra utilizada
'na "criptografia" da senha
Private Function CompileVal(Text As String) As Long
   Dim Val As String
   Dim TextRev As String
   Dim i As Long

   TextRev = StrReverse(Text)
   For i = 1 To Len(TextRev)
      Val = Val & AlnRight(Hex(Asc(Mid(TextRev, i, 1))), 2)
   Next i
   CompileVal = HexToLng(Val)
End Function

'Alinha a esquerda
Private Function AlnRight(Val As String, LenEnd As Long, Optional Char As String = "0") As String
   AlnRight = String(LenEnd - Len(Val), Char) & Val
End Function

'Converte um número Hexadecimal em Inteiro Longo
Private Function HexToLng(ValHex As String) As Long
   HexToLng = Val("&h" & ValHex & "&")
End Function

sexta-feira, 5 de novembro de 2010

Recuperando Senha do Banco de Dados Access 97


Contador de acessoVisitas


Já aconteceu comigo e provavelmente com você que está lendo. Incluir uma senha em um banco de dados Access 97 e depois não recordar. Por isso, e por didática, resolvi postar o código em Visual Basic 6.0.

Veja Também Recuperando Senha do Banco de Dados Access 2000

Vou considerar um Form com uma caixa de texto onde será colocado o caminho completo da base de dados. Um Botão que executará a quebra da senha e um rótulo que mostrará a senha.

No evento on_Click do botão, incluiremos o código.


Private Sub Command1_Click()
   Label1.Caption = DescobreSenha(Text1.Text)
End Sub


Crie um módulo e inclua o código abaixo.


Public Function DescobreSenha(NomeDB As String) As String
   Dim NPassByte() As Byte
   Dim hFile As Integer
   Dim subPassByte() As Byte
   Dim passByte(0 To 19) As Byte
   Dim i As Integer
   Dim Buffer As String

   'Abrindo o arquivo mdb (base de dados) de forma binária
   hFile = FreeFile
   Open NomeDB For Binary As #hFile

   'Pulando para a posição do arquivo que contém a senha
   Seek #hFile, 67

   'pegando os 20 caracteres a partir da posição de início
   'A senha do access suporta senha de no máximo 20 caracteres
   subPassByte = InputB(20, #hFile)

   'fechando o arquivo
   Close #hFile

   'String de conversão da senha
   NPassByte = ChrB(134) & ChrB(251) & ChrB(236) & ChrB(55) & ChrB(93) & ChrB(68) & ChrB(156) & ChrB(250) & ChrB(198) & ChrB(94) & ChrB(40) & ChrB(230) & ChrB(19) & ChrB(182) & ChrB(138) & ChrB(96) & ChrB(84) & ChrB(148) & ChrB(123) & ChrB(54)

   'Usando a string de conversão para converter a senha
   'a "criptografia da senha" nada mais é do que um Xor
   'dos bytes no arquivo da base de dados com a string
   'criada acima
   For i = 0 To 19
      passByte(i) = subPassByte(i) Xor NPassByte(i)
   Next

   'convertendo o vetor de byte em uma string no unicode
   Buffer = StrConv(passByte, vbUnicode) & vbNullChar

   'Retornado a string com a senha, convertida, limpando a string dos nulo, pois na
   'maioria das vezes a senha não tem o tamanho de 20 caracteres
   DescobreSenha = Left$(Buffer, InStr(1, Buffer, vbNullChar, vbBinaryCompare) - 1)
End Function

quinta-feira, 2 de julho de 2009

Montando um ambiente utilizando Tomcat+Java+mysql (Debian)


Contador de acessoVisitas

Ferramentas necessárias

Considerações iniciais


O objetivo desse artigo não é ensinar a programação java, nem explicar o funcionamento do tomcat. Será considerado que o leitor já tem estas informações. Aqui iremos apenas mostrar o caminho para a instalação e configuração do servidor tomcat, apesar de utilizar de alguns códigos em java para testar o funcionamento de nosso servidor.

Ferramentas

Para começarmos a montagem de nosso ambiente, considerarei que algumas ferramentas já estão instaladas. Não irei entrar em detalhes sobre estas instalações, mas darei uma dica para instalá-las via apt-get.

Serão necessários:

mysql - servidor de base de dados
# apt-get install mysql-server-5.0

bind - servidor DNS
# apt-get install bind9

O servidor de nomes serivrá para utilizarmos o domínio de nosso servidor no lugar do localhost, apesar de este artigo utilizarmos sempre a URL http://localhost.

lynx - navegador de páginas em modo texto
# apt-get install lynx

Iremos mostrar neste artigo a instalação do

Java - jsdk
Tomcat - conatiner para aplicações java para web
drive do java para mysql.


Instalação das ferramentas

Antes de começar as instalações, gostaria de informar que as instalações serão feitas em modo shell, utilizando o apt-get, mas o leitor poderá optar por utilizar a ferramenta gráfica (front end) synaptic.

Obs.: se a apt-get não encontrar os pacotes que iremos instalar, adicione os seguintes repositórios em seu arquivo /etc/apt/source.list.


deb http://ftp.debian.org/debian/ etch main contrib non-free
deb http://ftp.br.debian.org/debian etch main contrib non-free.



Antes de mais nada será necessário instalar os pacotes java, para isso basta usar a seguinte linha de comando:

# apt-get install sun-java5-jdk

Agora, iremos instalar o tomcat. Outra tarefa muito fácil, basta como root digitar o seguinte comando:

# apt-get install tomcat5.5


O padrão do tomcat é responder a requisições solicitadas na porta 8180, logo, a URL utilizada para acessar as páginas em seu servidor será:

http://localhost:8180

Você poderá alterar esta porta alterando-a na linha
<Connector port="8180" maxHttpHeaderSize="8192"
do arquivo /usr/share/tomcat5.5/conf/server.xml, porém, aqui nós iremos trabalhar com esta porta padrão.

Feito isso, nosso container terá sido instalado, porém, não aparecerá nenhuma página, pois nada foi criado. Podemos então instalar a página de administração do tomcat e as páginas de exemplos, para isso excute, como root:

# apt-get install tomcat5.5-admin tomcat5.5-webapps

Agora, faça o teste

# lynx localhost:8180


Configurando o Tomcat

Primeiro, vamos verificar qual diretório Home do tomcat, para isso, basta entrar no arquivo /etc/init.d/tomcat5.5 e ver as variáveis de instalação.

# more /etc/init.d/tomcat5.5

aparecerá algo como:


PATH=/bin:/usr/bin:/sbin:/usr/sbin
NAME=tomcat5.5
DESC="Tomcat servlet engine"
CATALINA_HOME=/usr/share/$NAME
DAEMON=$CATALINA_HOME/bin/catalina.sh
DEFAULT=/etc/default/$NAME


ou seja, neste caso a pasta Home é /usr/share/tomcat5.5.


Vamos alterar o usuário e a senha do administrador.
Edite o arquivo /usr/share/tomcat5.5/conf/tomcat-users.xml e subistituir seu conteúdo por.


<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
<role rolename="manager"/>
<role rolename="admin"/>
<user username="admin" password="123456" roles="admin,manager"/>
</tomcat-users>


salve o arquivo e reinicie o tomcat com o comando

# /etc/init.d/tomcat5.5 restart

Feito isso, podemos acessar a página de configuração do tomcat



# lynx localhost:8180

ir no link Status, digitar o usuário admin e senha 123456.

vá no link List Applications para ver as aplicações que estão em execução.


Criando nossa aplicação para teste

Nossa primeira aplicação de teste será um arquivo jsp.

Caso não exista, cria o diretório /var/www/teste. Importante é verificar a permissão para que o tomcat tenha acesso. Eu sugiro a permissão 755.

dentro de /var/www crie o arquivo teste.xml com o seguinte conteúdo


<Context path="/teste" docBase="/var/www/teste"
   debug="0" privileged="true" allowLinking="true">
</Context>


Esse arquivo informa que quando for acrescentado /teste no final da URL ele deverá redirecionar para o diretório /var/www/teste.

Existe um arquivo com <Context path="/" docBase=... informando para qual diretório o tomcat deverá apontar quando não for digitado nada depois da URL.

Ainda dentro diretório /var/www/teste, crie o arquivo index.jsp e coloque o conteúdo


Olá mundo !!!<br>
1 + 1 = ${1+1}


salve.
Essa será a nossa página.

Agora entre no diretório /usr/share/tomcat5.5/conf/Catalina/localhost/ e crie um link simbólico com o nome de teste.xml para /var/www/teste/teste.xml

# cd /usr/share/tomcat5.5/conf/Catalina/localhost/
# ln -s /var/www/teste.xml teste.xml


O tomcat irá ler todos os xml's que estão dentro desta pasta para configurar os acessos as páginas. Nós poderíamos ter criado o arquivo teste.xml direto neste local, mas por questão de organização preferi criá-lo em outro local e fazer um link.

Reinicie o tomcat e faça o teste acessando a URL localhost:8180/teste

deverá aparecer o seguinte conteúdo

Olá mundo !!!
1 + 1 = 2

Nosso segundo exemplo será a criação de servelet.

Para isso, criaremos dentro de nosso diretório /var/www/teste o diretório WEB-INF e dentro do diretório WEB-INF crie o diretório classes.

# cd /var/www/teste
# mkdir WEB-INF
# mkdir WEB-INF/classes


Dentro do diretório classes criaremos nosso código java. Chamarei de Teste2.java e conterá o seguinte conteúdo.


import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class Teste2 extends HttpServlet
{
   public void doGet( HttpServletRequest request, HttpServletResponse response ) throws IOException, ServletException
   {
      response.setContentType("text/html");
      PrintWriter out = response.getWriter();
      out.println("<html>");
      out.println("<body>");
      out.println("<head>");
      out.println("<title>Ola mundo !</title>");
      out.println("</head>");
      out.println("<body>");
      out.println("<h1>Ola Mundo!</h1>");
      out.println("</body>");
      out.println("</html>");
   }
}


Grave o arquivo.

Para gerar o arquivo class, precisaríamos do servlet.jar, porém no java 5 o arquivo correto é servlet-api.jar. Procure por esse arquivo em seu micro utilizando o comando find.

# find / -name servlet-api.jar

No nosso caso o arquivo foi encontrado no diretório /usr/share/java/servlet-api.jar, então, poderemos compilar nossa servlet com o seguinte comando:

# javac -classpath /usr/share/java/servlet-api.jar Teste.java

Agora nossa classe está pronta.

Vamos fazer com que possamos acessá-la pela url.

crie o arquivo WEB-INF/web.xml com o seguinte conteúdo:


<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

   <display-name>Teste !</display-name>
   <description>
      Tetste Ola Mundo !!
   </description>

   <servlet>
      <servlet-name>teste</servlet-name>
      <servlet-class>Teste</servlet-class> //Nome da classe a ser acessada
   </servlet>

   <servlet-mapping>
      <servlet-name>teste</servlet-name>
      <url-pattern>/teste-ola</url-pattern> // caminho a ser digitado
   </servlet-mapping>
</web-app>


Reinicie o tomcat.

# /etc/ini.d/tomcat5.5

Agora, o endereço http://localhost:8180/teste acessará nosso arquivo jsp e o endereço http://localhost:8180/teste/teste-ola acessará nosso servlet.


Conectando ao mysql

Vamos começar de forma diferente esse item. Começaremos criando o código para acessar as tabelas mysql e em seguida iremos corrigindo os erros conforme forem aparecendo.

Considerarei que o mysql acabou de ser instalado, logo, encontra-se sem banco, tabelas, senha etc.

Criando a senha do root como 123456:

# mysqladmin -u root password 123456

Entrando no mysql

# mysql -u root -p

Basta digitar a senha criada.

Confirmando se existe banco de dados criado.

mysql> show databases;

Se aparecer empty é porque está vazio.

Criando o banco de dados DBTeste

mysql> create database dbTeste;

Confirmando se criou.

mysql> show databases;

+-------------------------+
| Database |
+-------------------------+
| dbTeste |
+-------------------------+

Acessando o Banco:

mysql> use dbTeste

Crinando uma tabela (tbTeste) com apenas um registro (codteste) para podermos testar.

mysql> create table tbTeste (codteste integer);

Verificando se a tabela foi criada.
mysql> show tables;
+-------------------+
| Tables_in_dbTeste |
+-------------------+
| tbTeste |
+-------------------+

Inserindo registros na tabela.
mysql> insert into tbTeste (codteste) value (1);

mysql> insert into tbTeste (codteste) value (7);

mysql> insert into tbTeste (codteste) value (17);

mysql> insert into tbTeste (codteste) value (37);

Listando para saber se os registros realmente foram inseridos de forma correta.

mysql> select * from tbTeste;
+----------+
| codteste |
+----------+
| 1 |
| 7 |
| 17 |
| 37 |
+----------+

Beleza, nossa base está pronta para ser usada. Vamos sair.

mysql> exit

Agora, criaremos nosso código em java para testarmos a conexão com a base de dados.

Crie um arquivo com o nome OlaBase.java, em qualquer diretório, apenas para teste, e inclua o conteúdo a seguir.


import java.sql.*;
public class OlaBase
{
   public static void main (String args[])
   {
      String url = "jdbc:mysql://localhost:3306/dbTeste"; //string de conexão a base dbTeste
      String user = "root"; //usuário da base de dados
      String pwd = "123456";//senha do usuário criado
      try
      {
         Class.forName("com.mysql.jdbc.Driver");
         System.out.println("\nDrive carregado com sucesso!!!\n");
         try
         {
            Connection cn = DriverManager.getConnection(url, user, pwd);
            System.out.println("\nConexao estabelecida!!!\n");
            String sql = "select * from tbTeste";
            Statement stm = cn.createStatement();
            try
            {
               ResultSet rs = stm.executeQuery(sql);
               while (rs.next())
               {
                  System.out.println("\n" + rs.getString("codteste") + "\n");
               }
            }
               catch (Exception ex)
            {
               System.out.println("\nErro no Select!!!\n");
            }
         }
         catch (Exception ex)
         {
            System.out.println("\nErro na conexao!!!\n");
         }
      }
      catch (ClassNotFoundException ex)
      {
         System.out.println("Erro na conexao com a base de dados!!!");
         ex.printStackTrace();
      }
      catch (Exception ex)
      {
         System.out.println("Drive nao pode ser carregado!!!");
      }
      System.out.println("Olá Base!!!");
   }
}


Agora vamos compilar.

# javac OlaBase.java

Tudo deverá ocorrer OK. Então, vamos executar.

# java OlaBase

Devera aparecer a seguinte saída.

Erro na conexao com a base de dados!!!

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:164)
at OlaBase.main(OlaBase.java:11)
Ola Base!!!

Vimos nesta saída que o drive não foi encontrado (ClassNotFoundException: com.mysql.jdbc.Driver).

Então, vamos instalar o drive para mysql.
Primeiro, vamos ver se ele exeiste em nossa máquina.

# find / -name "mysql-connect*"

Se não retornar nenhum arquivo, vamos a instalação de drive.
Vamos ver se existe algum pacote para podermos instalarmos via apt-get.

# apt-cache search jdbc

Aparecerá a seguinte lista de pacotes.

haskell-hsql-doc - Multi-Database Interface System for Haskell
henplus - JDBC SQL commandline frontend with TAB-completion
hsqldb-server - Java SQL database server
libghc6-hdbc-dev - Haskell Database Connectivity, GHC6 package
libghc6-hsql-dev - Multi-Database Interface System for Haskell
libghc6-hsql-mysql-dev - Multi-Database Interface System for Haskell
libghc6-hsql-odbc-dev - Multi-Database Interface System for Haskell
libghc6-hsql-postgresql-dev - Multi-Database Interface System for Haskell
libghc6-hsql-sqlite-dev - Multi-Database Interface System for Haskell
libghc6-hsql-sqlite3-dev - Multi-Database Interface System for Haskell
libhsqldb-java - Java SQL database engine
libhsqldb-java-doc - documentation for HSQLDB
libhugs-hdbc - Haskell Database Connectivity, Hugs package
liblog4j1.2-java - Logging library for java
libmysql-java - Java database (JDBC) driver for MySQL
libodbc++-dev - C++ library for ODBC SQL database access
libodbc++-doc - C++ library for ODBC SQL database access
libodbc++4 - C++ library for ODBC SQL database access
libpg-java - Java database (JDBC) driver for PostgreSQL
libpgjava - Java database (JDBC) driver for PostgreSQL - transitional package
libpostgis-java - geographic objects support for PostgreSQL -- JDBC support
libsapdbc-java - JDBC interface to the MaxDB database system
libstruts1.2-java - Java Framework for MVC web applications
openoffice.org-base - OpenOffice.org office suite - database
postgresql-contrib-7.4 - additional facilities for PostgreSQL

No nosso caso queremos a "libmysql-java - Java database (JDBC) driver for MySQL". Então, vamos instalar.

# apt-get install libmysql-java

Após a instalação, vamos conferir se o arquivo .jar passou a existir.

# find / -name "mysql-connect*"

Agora aparecerá o arquivo, no meu caso o resultado da busca foi:
/usr/share/java/mysql-connector-java-5.0.4.jar

Então, basta colocar esse arquivo no classpath.

# export CLASSPATH=$CLASSPATH:"/usr/share/java/mysql-connector-java-5.0.4.jar"

Agora, tente executar o nosso programa.

# java OlaBase

O resultado será:


Drive carregado com sucesso!!!


Conexao estabelecida!!!


1


7


17


37

Ola Base!!!

Pronto, a conexão com a base de dados foi estabelecida.

Claro que a variável CLASSPATH não continuará não valerá quando reiniciarmos a máquina. Mas para resolver o problema, basta adicionar a linha no final do arquivo /etc/profile

echo "export CLASSPATH=\$CLASSPATH:"/usr/share/java/mysql-connector-java.jar"" >> /etc/profile

Agora, vamos voltar nosso arquivo index.jsp no diretório /var/www/teste e vamos fazer a alteração abaixo, para conectar a base de dados. Basta incluir no final de nosso arquivo o código:


<%
try
{
   Class.forName("com.mysql.jdbc.Driver");
   out.println ("<br>Drive encontrado!!!");
}
catch (ClassNotFoundException ex)
{
   out.println ("<br>Erro drive<br>");
   out.println (ex.toString());
}
catch (Exception ex)
{
   out.println ("<br>Erro ao procurar o drive<br>" + ex.toString());
}
%>


Salve o arquivo e em seu browser, acesse a url hocalhost:8180/teste

Aparecerá a página:

Olá mundo !!!
1 + 1 = 2

Erro drive
java.lang.ClassNotFoundException:com.mysql.jdbc.Driver

Mas como o drive é encontrado em nossa aplicação e não é encontrado em nossa página ? O motivo é que nossa aplicação procura pelo CLASSPATH já as páginas tem é limitada a buscar no diretório padrão ou no diretório de nosso projeto.

Então, basta copiar o arquivo com o drive para o diretório <CATALINA_HOME>/common/lib, porém aqui iremos apenas criar um link simbólico para o arquivo.

# cd /usr/share/tomcat5.5/common/lib
# ln -s ../../../java/mysql-connector-java-5.0.4.jar mysql-connector-java.jar


Reinicie o tomcat
# /etc/init.d/tomcat5.5 restart

Tente novamente acessar a URL localhost:8180/teste
Desta vez o resultado será:

Olá mundo !!!
1 + 1 = 2

Drive encontrado!!!

Vamos continuar nosso exemplo de teste, aumentando o código.
Edite novamente o arquivo /var/www/teste/index.jsp

Agora, vamos modificá-lo deixando com o seguinte código:


<%@page import="java.sql.*"%>
Olá mundo !!!<br>
1 + 1 = ${1+1}
<br>

<%
String url = "jdbc:mysql://localhost:3306/dbTeste"; //string de conexão a base dbTeste
String user = "root"; //usuário da base de dados
String pwd = "123456";//senha do usuário criado
try
{
   Class.forName("com.mysql.jdbc.Driver");
   out.println("<br>Drive carregado com sucesso!!!<br>");
   try
   {
      Connection cn = DriverManager.getConnection(url, user, pwd);
      out.println("<br>Conexao estabelecida!!!<br>");
      String sql = "select * from tbTeste";
      Statement stm = cn.createStatement();
      try
      {
         ResultSet rs = stm.executeQuery(sql);
         while (rs.next())
         {
            out.println( " - " + rs.getString("codteste"));
         }
      }
      catch (Exception ex)
      {
         out.println("<br>Erro no Select!!!<br>" + ex.printStackTrace());
      }
   }
   catch (Exception ex)
   {
      out.println("<br>Erro na conexao!!!<br>" + ex.printStackTrace());
   }
}
catch (ClassNotFoundException ex)
{
   out.println("<br>Erro na conexao com a base de dados!!!<br>" + ex.printStackTrace());
}
catch (Exception ex)
{
   out.println("<br>Drive nao pode ser carregado!!!<br>" + ex.printStackTrace());
}
   out.println("<br>Olá Base!!!<br>");
}

%>


Ao acessarmos a URL localhost:8081/teste nos depararemos com a seguinte mensagem:

Olá mundo !!!
1 + 1 = ${1+1}

Erro na conexão

com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception: ** BEGIN NESTED EXCEPTION ** java.security.AccessControlException MESSAGE: access denied (java.net.SocketPermission localhost resolve) STACKTRACE: java.security.AccessControlException: access denied (java.net.SocketPermission localhost resolve) at java.security.AccessControlContext.checkPermission(AccessControlContext.java:264) at java.security.AccessController.checkPermission(AccessController.java:427) at java.lang.SecurityManager.checkPermission(SecurityManager.java:532) at java.lang.SecurityManager.checkConnect(SecurityManager.java:1031) at java.net.InetAddress.getAllByName0(InetAddress.java:1134) at java.net.InetAddress.getAllByName(InetAddress.java:1072) at java.net.InetAddress.getAllByName(InetAddress.java:1008) at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:138) at com.mysql.jdbc.MysqlIO.(MysqlIO.java:277) at com.mysql.jdbc.Connection.createNewIO(Connection.java:2668) at com.mysql.jdbc.Connection.(Connection.java:1531) at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266) at java.sql.DriverManager.getConnection(DriverManager.java:525) at java.sql.DriverManager.getConnection(DriverManager.java:171) at org.apache.jsp.index_jsp._jspService(index_jsp.java:65) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:334) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:243) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAsPrivileged(Subject.java:517) at org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:275) at org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:161) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:245) at org.apache.catalina.core.ApplicationFilterChain.access$0(ApplicationFilterChain.java:177) at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:156) at java.security.AccessController.doPrivileged(Native Method) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:152) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869) at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664) at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527) at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684) at java.lang.Thread.run(Thread.java:595) ** END NESTED EXCEPTION ** Last packet sent to the server was 52 ms ago.

Felizmente, se tudo correu bem até aqui, esse será nosso último erro.

Teremos que liberar a permissão de conexão.

As permissões estão definidas no arquivo "$CATALINA_BASE/conf/catalina.policy", neste caso em /usr/share/tomcat5.5/conf/catalina.policy.

Seria só alterar esse arquivo, mas se verificarmos nosso daemon (/etc/init.d/tomcat5.5), veremos que este arquivo e montado na inicialização do tomcat, pois encontraremos a seguinte linha:

# cat /etc/tomcat5.5/policy.d/*.policy \
>> "$CATALINA_BASE/conf/catalina.policy"


Ou seja, não adianta modificar o arquivo /usr/share/tomcat5.5/conf/catalina.policy, pois quando iniciarmos o tomcat esse arquivo será refeito. Na inicialização, o conteúdo do arquivo "$CATALINA_BASE/conf/catalina.policy" é substituindo pelo conteúdo de todos os arquivos ".policy" do diretório /etc/tomcat5.5/policy.d/. Então, a linha abaixo nós poderemos incluir dentro de um arquivo ".policy" do diretório /etc/tomcat5.5/policy.d/ ou, o que acho mais organizado, criar um arquivo.

Crie um arquivo /etc/tomcat5.5/policy.d/05teste.policy. Inclua o seguinte conteúdo:


grant codeBase "file:/var/www/teste/-" {
   permission java.security.AllPermission;
};


Com esse conteúdo, você faria todas as liberações para sua aplicação. O mais seguro é ir liberando as permissões a medida que forem aparecendo as necessidades, então, sugiro substituir o conteúdo do arquivo por


grant codeBase "file:/var/www/teste/-" {   
   permission java.net.SocketPermission "localhost:3306", "connect,resolve";
};


Assim, liberaremos apenas a conexão com o mysql.

Agora, basta reiniciarmos o tomcat

# /etc/init.d/tomcat5.5 restart

e testarmos nossa aplicação acessando a URL localhost:8180/teste

deverá aparecer o seguinte conteúdo:

Olá mundo !!!
1 + 1 = 2

Drive carregado com sucesso!!!

Conexao estabelecida!!!

- 1

- 7

- 17

- 37
Advogados
Visitas