Integrando o PHP com Java (parte 2)
Agora que já criamos um exemplo de "processar um formulário html" e outro de "acesso a base Mysql", já temos um certo conhecimento para prosseguir, faremos agora outros métodos e funções para a funcionalidade do Sistema.
Implementaremos primeiro nossa Classe "JavaPHP" do Java.
JavaPHP.java
**
**
Esse método verifica se Usuário e Senha são válidos, observe que "preparedStatement" prepara sua Sql com uma caracter ? "usuario = ? AND senha = ? AND ", no Php colocamos nossas variáveis direto no Sql, aqui no Java precisa setar elas "preparedStatement.setString(1, usuario)".
Caso não exista o Usuário e Senha retorna uma String com a palavra "notFound", existindo retorna o ID do usuário.
Agora implementaremos nossa classe PHP.
classe_main_phpjava.php
**
**
Função "doValidacao($usuario, $senha)" verifica o retorno do método caso seja "notFound" significa que o Usuário ou Senha não existe na Base.
Agora mudaremos a página do form "index.php".
index.php
**
**
Comente a linha onde chamava a função "doProcessaForm", fizemos nosso form interagir com PHP+Java acessando o Mysql.
Agora criaremos outras páginas, são essas.
Página restrita: pagina_restrita.php
Páginas Links: todos os links cadastrados na tabela MENU deverão existir, nesse exemplo são 3 "seguranca.php, corinthians.php e prasempre_ch.php".
Implementaremos novamente nossa classe Java para "montar o menu".
JavaPHP.java
**
**
Obs: Montei o menu Html dentro do Java, o ideal seria separar a regra de negócio da regra de tela, para isso existem Classes ótimas como Smarty Templates.
Na consulta SQL verifico na tabela PERMISSAO em quais links o usuário terá acesso, dentro do loop faço uma condição Se o usuário tiver acesso a coluna ficará da cor "branca", não tendo acesso ficará "cinza".
Faremos outro método muito parecido com o anterior, ele serve pra pegarmos os "caminhos" dos links que o usuário terá acesso.
JavaPHP.java
**
**
A String "pathPermissaoUsuario" terá os caminhos dos links de acesso concatenados com o caracter ";", este valor ficará gravado numa Session(Php) para sabermos em qual página o user terá acesso.
Agora faremos algumas funções de "Segurança" no PHP, antes mudaremos a função "doValidacao".
classe_main_phpjava.php - Função doValidacao($usuario, $senha).
**
**
Caso o Usuário e Senha exista inicia a Session e redireciona para a página restrita "pagina_restrita.php".
Faremos agora "5 funções" de Segurança no PHP.
classe_main_phpjava.php
**
**
Função "doPermissaoUsuario($idUsuario)" grava numa Session($_SESSION['pathMenuPermissaoUsuario']) os caminhos dos links onde o usuário terá acesso para navegar.
Função "doPermissaoNavegacaoLink($safeIdUrl)" verifica os valores que foram gravados na Session($_SESSION['pathMenuPermissaoUsuario']) e compara com o valor do link atual, o paramêtro recebe o nome real do link corrente. Ex: $javaPhp->doPermissaoNavegacaoLink("corinthians.php")
Função "doLogadoUser()" verifica se o usuário se logou no Sistema.
Função "doSairSistema()" para deslogar-se do Sistema.
Função "noCache()" para não permitir cache no Browser Cliente.
Agora precisamos criar a página restrita.
pagina_restrita.php
**
**
Printando "<?=$javaPHP->doMontaMenu($_SESSION['idUsuarioSession'])?>" mostrará um menu restrito onde a coluna estiver em "branco" mostra que tem permissão de acesso, "cinza" não tem.
Já estamos quase acabando, veremos mais alguns detalhes na próxima página.
Implementaremos primeiro nossa Classe "JavaPHP" do Java.
JavaPHP.java
**
public String doValidacao(String usuario, String senha) { final Connection connection = ConexaoDB.getConexao(); String idUsuario = ""; try { PreparedStatement preparedStatement = connection.prepareStatement("SELECT id_usuario FROM pt_usuario WHERE usuario = ? AND senha = ? AND ativo = 'sim'"); preparedStatement.setString(1, usuario); preparedStatement.setString(2, senha); ResultSet resultSet = preparedStatement.executeQuery(); if (!resultSet.next()){ return "notFound"; } idUsuario += resultSet.getString(1); preparedStatement.close(); resultSet.close(); } catch(SQLException e) { return e + ""; } finally { ConexaoDB.close(connection); } return idUsuario; }
Esse método verifica se Usuário e Senha são válidos, observe que "preparedStatement" prepara sua Sql com uma caracter ? "usuario = ? AND senha = ? AND ", no Php colocamos nossas variáveis direto no Sql, aqui no Java precisa setar elas "preparedStatement.setString(1, usuario)".
Caso não exista o Usuário e Senha retorna uma String com a palavra "notFound", existindo retorna o ID do usuário.
Agora implementaremos nossa classe PHP.
classe_main_phpjava.php
**
function doValidacao($usuario, $senha) { $validacao = @$this->javaPhp->doValidacao($usuario, base64_encode($senha)); if ($validacao == "notFound"){ echo "Usuário ou Senha incorretos."; } else { echo "Ok, ID = $validacao."; } }
Função "doValidacao($usuario, $senha)" verifica o retorno do método caso seja "notFound" significa que o Usuário ou Senha não existe na Base.
Agora mudaremos a página do form "index.php".
index.php
**
$javaPHP->doValidacao($_POST['usuario'], $_POST['senha']); //$javaPHP->doProcessaForm($_POST['usuario'], $_POST['senha']);
Comente a linha onde chamava a função "doProcessaForm", fizemos nosso form interagir com PHP+Java acessando o Mysql.
Agora criaremos outras páginas, são essas.
Página restrita: pagina_restrita.php
Páginas Links: todos os links cadastrados na tabela MENU deverão existir, nesse exemplo são 3 "seguranca.php, corinthians.php e prasempre_ch.php".
Implementaremos novamente nossa classe Java para "montar o menu".
JavaPHP.java
**
public String doMontaMenu(int idUsuario) { final Connection connection = ConexaoDB.getConexao(); String menu = "<table border=\"0\" cellspacing=\"1\" cellpadding=\"0\" width=\"250\" bgcolor=\"#000000\">\n"; try { PreparedStatement preparedStatement = connection.prepareStatement("SELECT m.nome_link, m.path_link, p.boolean_permissao FROM permissao AS p, menu AS m WHERE p.id_menu = m.id_menu AND p.id_usuario = ?"); preparedStatement.setInt(1, idUsuario); ResultSet resultSet = preparedStatement.executeQuery(); int i = 0; while (resultSet.next()){ if (resultSet.getString(3).equalsIgnoreCase("sim")){ menu += " <tr>\n <td bgcolor=\"#FFFFFF\" align=\"center\"><a href=\""+resultSet.getString(2)+"\">"+resultSet.getString(1)+"</a></td>\n </tr>\n"; } else { menu += " <tr>\n <td bgcolor=\"#CCCCCC\" align=\"center\"><a href=\""+resultSet.getString(2)+"\">"+resultSet.getString(1)+"</a></td>\n </tr>\n"; } i++; } menu += "</table>\n"; preparedStatement.close(); resultSet.close(); if (i == 0){ return "menuNull"; } } catch(SQLException e) { return e + ""; } finally { ConexaoDB.close(connection); } return menu; }
Obs: Montei o menu Html dentro do Java, o ideal seria separar a regra de negócio da regra de tela, para isso existem Classes ótimas como Smarty Templates.
Na consulta SQL verifico na tabela PERMISSAO em quais links o usuário terá acesso, dentro do loop faço uma condição Se o usuário tiver acesso a coluna ficará da cor "branca", não tendo acesso ficará "cinza".
Faremos outro método muito parecido com o anterior, ele serve pra pegarmos os "caminhos" dos links que o usuário terá acesso.
JavaPHP.java
**
public String doPermissaoUsuario(int idUsuario) { final Connection connection = ConexaoDB.getConexao(); String pathPermissaoUsuario = ""; try { PreparedStatement preparedStatement = connection.prepareStatement("SELECT m.path_link FROM permissao AS p, menu AS m WHERE p.id_menu = m.id_menu AND p.id_usuario = ? AND p.boolean_permissao = 'sim'"); preparedStatement.setInt(1, idUsuario); ResultSet resultSet = preparedStatement.executeQuery(); int i = 0; while (resultSet.next()){ pathPermissaoUsuario += resultSet.getString(1) + ";"; i++; } preparedStatement.close(); resultSet.close(); if (i == 0){ return "permissaoNull"; } } catch(SQLException e) { return e + ""; } finally { ConexaoDB.close(connection); } return pathPermissaoUsuario; }
A String "pathPermissaoUsuario" terá os caminhos dos links de acesso concatenados com o caracter ";", este valor ficará gravado numa Session(Php) para sabermos em qual página o user terá acesso.
Agora faremos algumas funções de "Segurança" no PHP, antes mudaremos a função "doValidacao".
classe_main_phpjava.php - Função doValidacao($usuario, $senha).
**
function doValidacao($usuario, $senha) { $validacao = @$this->javaPhp->doValidacao($usuario, base64_encode($senha)); if ($validacao == "notFound"){ echo "Usuário ou Senha incorretos."; } else { session_start(); $_SESSION['idUsuarioSession'] = $validacao; $_SESSION['usuarioSession'] = $usuario; $_SESSION['senhaSession'] = base64_encode($senha); header("Location: pagina_restrita.php"); } }
Caso o Usuário e Senha exista inicia a Session e redireciona para a página restrita "pagina_restrita.php".
Faremos agora "5 funções" de Segurança no PHP.
classe_main_phpjava.php
**
function doPermissaoUsuario($idUsuario) { $permissaoUsuario = @$this->javaPhp->doPermissaoUsuario($idUsuario); if ($permissaoUsuario != "permissaoNull"){ $path = ""; $permissaoUsuario = explode("|=|", $permissaoUsuario); for ($i = 0; $i < count($permissaoUsuario); $i++){ if ($permissaoUsuario[$i] != "") { $path .= $permissaoUsuario[$i].";"; } } $_SESSION['pathMenuPermissaoUsuario'] = $path; } else { $_SESSION['pathMenuPermissaoUsuario'] = ""; } } function doPermissaoNavegacaoLink($safeIdUrl) { $permissaoNavegacao = explode(";", $_SESSION['pathMenuPermissaoUsuario']); for ($i = 0; $i < count($permissaoNavegacao); $i++){ if ($permissaoNavegacao[$i] != "") { if ($permissaoNavegacao[$i] == $safeIdUrl) { $valueBoolean = true; } } if (!$valueBoolean) { header("Location: pagina_restrita.php"); } } } function doLogadoUser() { session_start(); if (empty($_SESSION['idUsuarioSession']) and empty($_SESSION['usuarioSession']) and empty($_SESSION['pathMenuPermissaoUsuario']) and empty($_SESSION['senhaSession'])){ unset($_SESSION['idUsuarioSession']); unset($_SESSION['usuarioSession']); unset($_SESSION['pathMenuPermissaoUsuario']); unset($_SESSION['senhaSession']); session_destroy(); echo "<script>alert('Você precisa se logar antes.'); \n window.location = 'index.php';</script>"; } } function doSairSistema() { session_start(); unset($_SESSION['pathMenuPermissaoUsuario']); unset($_SESSION['idUsuarioSession']); unset($_SESSION['usuarioSession']); unset($_SESSION['senhaSession']); session_destroy(); header("Location: index.php"); } function noCache() { header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); }
Função "doPermissaoUsuario($idUsuario)" grava numa Session($_SESSION['pathMenuPermissaoUsuario']) os caminhos dos links onde o usuário terá acesso para navegar.
Função "doPermissaoNavegacaoLink($safeIdUrl)" verifica os valores que foram gravados na Session($_SESSION['pathMenuPermissaoUsuario']) e compara com o valor do link atual, o paramêtro recebe o nome real do link corrente. Ex: $javaPhp->doPermissaoNavegacaoLink("corinthians.php")
Função "doLogadoUser()" verifica se o usuário se logou no Sistema.
Função "doSairSistema()" para deslogar-se do Sistema.
Função "noCache()" para não permitir cache no Browser Cliente.
Agora precisamos criar a página restrita.
pagina_restrita.php
**
<?php include_once("classe_main_phpjava.php"); $javaPHP = new JavaPHP(); $javaPHP->doLogadoUser(); $javaPHP->doPermissaoUsuario($_SESSION['idUsuarioSession']); $javaPHP->noCache(); if ($_GET['acao'] == "sair"){ $javaPHP->doSairSistema(); } ?> <html> <head> <title>Interagindo Java+PHP : Página Restrita</title> </head> <body> <?=$javaPHP->doMontaMenu($_SESSION['idUsuarioSession'])?> </body> </html>
Printando "<?=$javaPHP->doMontaMenu($_SESSION['idUsuarioSession'])?>" mostrará um menu restrito onde a coluna estiver em "branco" mostra que tem permissão de acesso, "cinza" não tem.
Já estamos quase acabando, veremos mais alguns detalhes na próxima página.
http://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-3.1.11.zip/from/http://mysql.mirror.netmonic.com/ esse funciona eu já baixei tem 7MB
24/10/2005 2:50pm
(~19 anos atrás)
24/10/2005 2:38pm
(~19 anos atrás)
Prezado amigo,
Li os seus artigos no PHPBRASIL sobre php com java e estão sendo muito úteis para mim. Entretanto estou com uma dúvida terrível e peço sua ajuda.
eu estou usando dois arquivos .jar
httpclient.jar e getUrl.jar
eu coloquei assim no meu php.ini:
java.class.path = "C:\apache\php\JAVA\php_java.jar;C:\apache\php\java_class\getUrl.jar;C:\apache\php\java_class\getUrl.jar\commons-httpclient-2.0.2.jar;C:\apache\php\java_class"
java.home = "C:\j2sdk1.4.2_05\bin"
java.library = "C:\j2sdk1.4.2_05\jre\bin\server\jvm.dll"
java.library.path = "C:\apache\php\extensions"
entretanto quando rodo a página php que eu fiz, ele lança uma ClassNotFound Exception.
vc poderia me dizer como que eu faço para ele encontrar os meus .jar ?
meu php está assim:
<?
$url_final = "http://www.uol.com.br";
$string_url=(String) $url_final;
$getStj = new Java("GetStj");
$html=$getStj->getHtml($string_url);
?>
desde já agradeço imensamente.
Alexandre
Li os seus artigos no PHPBRASIL sobre php com java e estão sendo muito úteis para mim. Entretanto estou com uma dúvida terrível e peço sua ajuda.
eu estou usando dois arquivos .jar
httpclient.jar e getUrl.jar
eu coloquei assim no meu php.ini:
java.class.path = "C:\apache\php\JAVA\php_java.jar;C:\apache\php\java_class\getUrl.jar;C:\apache\php\java_class\getUrl.jar\commons-httpclient-2.0.2.jar;C:\apache\php\java_class"
java.home = "C:\j2sdk1.4.2_05\bin"
java.library = "C:\j2sdk1.4.2_05\jre\bin\server\jvm.dll"
java.library.path = "C:\apache\php\extensions"
entretanto quando rodo a página php que eu fiz, ele lança uma ClassNotFound Exception.
vc poderia me dizer como que eu faço para ele encontrar os meus .jar ?
meu php está assim:
<?
$url_final = "http://www.uol.com.br";
$string_url=(String) $url_final;
$getStj = new Java("GetStj");
$html=$getStj->getHtml($string_url);
?>
desde já agradeço imensamente.
Alexandre
23/03/2005 1:02pm
(~20 anos atrás)
Nesse link(http://www.phpbrasil.com/scripts/download.php/id/2315) tem a versão "completa" do artigo.
04/05/2004 11:44am
(~20 anos atrás)
Tengo un proflema tengo una clase java con una función que llama a System.out.println("Hola"); y una pagina php que llama a este método, y el sistema me da un error, si quito esta linea funciona bien. Me gustaría saber si tengo que realizar álgún cambio en la configuración para redireccionar la salida estandard o que muchas gracias y perdon por no hablar portugés
04/05/2004 3:26am
(~20 anos atrás)
Bom, com essa integração da pra perceber como pode ser forte o uso combinado dos dois. É claro, que prefiro usar o Mysql com o php e integrar o java para algo livetime, mas seu exemplo é de muito bom tamanho e me mostrou como posso integrar essas duas linguagens poderosas, e que tem, de certo modo, um uso diferente, o que possibilita algo grande e bem feito.
29/04/2004 11:58am
(~20 anos atrás)
O artigo devia explorar rapidamente a documentação da parte de SQL em Java, pois isto ficou obscuro e atrapalhou o entendimento do funcionamento da classe JavaPHP criada.
Fora isto, a intenção do artigo foi atingida, deixando claro a integração PHP, Java e MySQL.
parabéns!
Fora isto, a intenção do artigo foi atingida, deixando claro a integração PHP, Java e MySQL.
parabéns!
27/04/2004 4:44pm
(~20 anos atrás)
O JavaScript abaixo não roda através do navegador Firefox. Será que VC poderia me ajudar alterando algum(s) parâmetro(s) ? Agradeço desde já = Fiumari:
<script language="JavaScript"> var ultimo=-1, dBanner;
function carrega(x) {dBanner=x;Banners()}
function Banners()
{ var MNews = new Array();
MNews[0]= '<iframe " name="_blank" scrolling="no" src="http://www.finet.com.br/google.htm" width="100%" frameborder="0" target="_blank" height="350" BORDER="0"></iframe><a href="http://www.finet.com.br/google.htm" target="_blank"></a>';
MNews[1]= '<iframe " name="_blank" scrolling="no" src="http://www.finet.com.br/google2.htm" width="100%" frameborder="0" target="_blank" height="350" BORDER="0"></iframe><a href="http://www.finet.com.br/google2.htm" target="_blank"></a>'
while((Numero = parseInt(Math.random()*MNews.length))==ultimo);
dBanner.innerHTML=MNews[Numero];
setTimeout("Banners()",15000);
} </script>