+2

Integrando o PHP com Java (parte 2)

criado por Rodrigo Rodrigues em 26/04/2004 11:58am
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
**
    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.

Comentários:

Mostrando 1 - 9 de 9 comentários
Olá, Rodrigo:
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>
03/09/2007 11:06am (~18 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
23/03/2005 1:02pm (~20 anos atrás)

DAVID disse:
¿qUE SERVIDOR UTILIZAIS APACHE SOLO?
13/05/2004 8:32am (~21 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 (~21 anos atrás)

DAVID disse:
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 (~21 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 (~21 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!
27/04/2004 4:44pm (~21 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)