IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Applets Java Discussion :

Accès à MySQL avec une applet Java exécutée sur un serveur web


Sujet :

Applets Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Février 2007
    Messages : 38
    Points : 26
    Points
    26
    Par défaut Accès à MySQL avec une applet Java exécutée sur un serveur web
    Bonjour à vous les gourous de la prog..

    Je me retourne vers vous car je manque d'idée pour résoudre mon problème...

    J'ai écris/copié une applet Java que j'ai intégré dans une page html "simple" pour faire des tests... Cette applet accède à ma base mySQL...

    Jusque là tout va bien... L'applet communique parfaitement avec la base... Le problème c'est lorsque j'intègre cette même applet sur une page html gérée par mon serveur apache, celle-ci tourne mais n'arrive plus à communiquer avec la base...

    Du coup je suis un peu planté, j'ai été jusqu'à spécifier le port de connexion à la base mais rien y fait....

    Je vous mets ci dessus le code de ma page html :


    <HTML>
    <BODY>

    <APPLET name="my" width=500 height=200 archive="mysql-jdbc.jar" code="CheckRecord.class"></APPLET>

    <INPUT type=checkbox name=test onclick="if (my) {my.callJavascript();}">

    </BODY>
    </HTML>

    Une petite remarque : le fichier "mysql-jdbc.jar" se trouve dans le même dossier que le fichier HTML.


    Viens à présent mon applet :

    import java.applet.Applet;
    import java.sql.*;

    public class CheckRecord extends Applet
    {
    public void callJavascript()
    {
    try
    {
    Class.forName("com.mysql.jdbc.Driver").newInstance();
    try
    {
    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/command?user=anonymous&password=");
    Statement instruction = conn.createStatement();
    instruction.executeUpdate("update counter set val=val+1");
    }
    catch (SQLException ex)
    {
    }
    }
    catch (Exception ex)
    {
    }
    }

    public void init()
    {
    }
    }

    Si quelqu'un a des idées j'en serais vraiment soulagé
    Merci pour vos réponses.

  2. #2
    Membre expérimenté
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Points : 1 540
    Points
    1 540
    Par défaut Reponse
    C'est un peu normale. Dans le code Java on voit que la connexion est établis vers la machine LocalHost. Faire tourner l'applet sur le serveur qui héberge à la fois le serveur web et Mysql fonctionne, tout simplement parceque "l'adresse" LocalHost, signifie tout simplement, le PC sur lequel le code tourne. Hors, une applet est exécutée dans l'environnement de la machine du visiteur, pour ton code, LocalHost devient la machine du visiteur, hors ce dernier ne possède pas de serveur MySQl contenant ta base de données, etc... Pour que cela fonctionne depuis une applet, sur le PC d'un Visiteur via Internet, c'est pas si simple. En effet, pour qu'une applet puisse utilisée la carte réseau de la machine qui l'exécute et établire une connexion (Que ce soit MySQl ou n'importe quoi d'autre FTP, HTTP, etc...) vers l'extérieur (donc pas en localhost), une règle élémentaire de sécurité des applets oblige ces dernières à être signées par un certificat de type Verisign, et lorsque le visiteur consulte la page hébergant une telle applet pour la première fois, une fenêtre d'avertissement apparaît (si l'applet a été signée, sinon, il y a tout simplement une erreur) et indique à l'utilisateur que l'applet qu'il s'apprète à exécutée va solliciter certaines ressources sensibles de sa machine, ce qui nécéssite de sa part une validation. Soit il autorise le code de l'applet à s'exécuter, soit il ne l'autorise pas. C'est seulement s'il l'autorise que l'applet pourra alors s'exprimée pleinnement. La première barrière de ce genre d'action est donc une barrière de sécurité qui nécéssite la mise en archive de l'application pour pouvoir signer cette dernière (il faut un fichier jar, et non pas un ensemble de fichers de classes), et que l'archive est été signée à l'aide d'un certificat privée ou public. Les certificats publics sont payant et peuvent s'obtenir auprès d'organisme comme Verisign. La notoriété de ces organismes et la procédure d'obtention d'un certificat garantie à l'utilisateur qu'il a bien à faire à un code honnète, et non pas à un petit malin qui veut fouiner dans sa machine. En effet, sans cette sécurité, n'importe qui pourrait écrire une Applet qui va relever les fichiers de l'utilisateur et en envoyer une copie sur son serveur. Pour résumer, tant que l'applet n'éffectue que des actions locale et ne concernant que le navigateur, aucun problème de sécurité, mais dés lors que le code de l'applet fait appel au système, à la mémoire, ou la carte réseau aussi bien qu'aux HDD, le problème de sécurité se pose et la signature de l'applet devient obligatoire. Pour ne pas aller jusqu'à payer Verisign, Sun documente parfaitement une méthode permettant de créer son propre certificat d'authenficiation, mais bien sûr, ce dernier sera toujours présenté aux utilisateurs comme n'étant pas vérifiable puisque privé. Mais si l'applet doit évoluer dans un environnement privé, cela reste parfaitement jouable et permet d'éviter certaines dépenses.
    Bon, courrage, c'est loin d'être fini.
    En effet, après avoir éliminé l'aspect sécurité, il faut modifier le code de l'applet et remplacer Localhost, par l'adresse IP du PC qui héberge le serveur MySQL. Mais là aussi, ce n'est pas simple. En effet, si le tout doit fonctionner en Intranet, ou réseau local si tu préfères, pas de problème, il suffit simplement de renseigner la bonne IP à la place de Localhost. Par contre, si le visiteur doit pouvoir consulter depuis Internet, ça se complique sérieusement. En effet, une connexion Internet met en place une adresse IP unique que l'on appelle une adresse IP public, qui est déterminée par ton fournisseur de connexion Internet. Moi par exemple, je suis chez free, et j'ai opté à l'époque pour une adresse IP fixe comme 86.81.125.254 par exemple. Cette adresse, c'est la seule adresse qui me correspond sur Internet, et elle représente l'adresse de Ma freebox, qui fait office de routeur vers mon réseau local. Mon réseau local possède entre autre une machine sur laquelle tourne un serveur MySQL. Admettons que cette machine possède comme adresse IP privée l'adresse 192.168.0.12, et que le serveur MySQL écoute le port standard 3306, il faut que l'utilisateur puisse depuis son poste se connecter à 192.168.0.12 sur le port 3306, hors, 192.168.0.12 étant une adresse privée, elle n'existe pas sur Internet. Seule l'adresse IP public de mon routeur (ma freebox), soit 86.81.12.254 existe sur Internet. Donc, l'utilisateur doit en fait se connecter dans cet exemple à un serveur Mysql situé sur Inernet à l'adresse 86.81.125.254 sur le port 3306, et pour que cela fonctionne, il faut ouvrir le port 3306 et le router vers mon serveur 192.168.0.12 au niveau de la configuration du routeur de ma freebox. Ainsi, sans s'en rendre compte, le visiteur va interrogé l'adresse 86.81.125.254 port 3306, ma freebox va router la requette vers mon réseau local, avec le port 3306 vers mon adresse privée 192.168.0.12. Mon serveur va accepter la requete, la traîter, et répondre à ma freebox, qui transmettra la réponse au visiteur. Ainsi, le visiteur ne peut voir que ma freebox, il ne ni voir ni savoir ce qui se trouve derrière.
    Pour résumer, il faut ouvrir le port 3306 de ton routeur (Attention, si en plus il y a un parre-feux, il faut penser à ajouter les reçettes qui permettrons le trafic IP de MySQL), et rediriger ce dernier vers l'adresse IP locale de ton PC qui héberge ton service serveur MySQL.
    Mais c'est toujours pas fini, en effet, au niveau de MySQL en lui même - c'est facile à voir si tu utilises par exemple PhpMyAdmin pour gérer tes bases - la notion d'utilisateur est relative à deux contextes, le contexte locale (localhost), et le contexte % (distant, ou depuis n'importe quel poste).
    En effet, dans ton exemple l'utilisateur est "anonymous", et il n'y a pas de mot de passe. Pour pouvoir permettre à un utilisateur d'Internet d'accéder à ta base, il faut t'assurer que l'utilisateur anonymous puisse se connecté dans le contexte % (depuis n'importe où), s'il est sur localhost, il ne pourra se connecter à la base qu'en évoluant physiquement sur la machine qui héberge la base.
    Je sais, c'est vraiement pas facile, mais c'est ça l'informatique. C'est comme les echecs, c'est facile de jouer, mais beaucoup plus compliquer de bien jouer.
    En clair, pour le commun des mortels, faire joujou sur son propre PC permet en générale toutes les fantaisies, mais dés lors que l'on veut faire interragir des système entre eux, que ce soit sur un réseau local ou routé, il est nécéssaire de prendre en considération toutes les contraintes liées à la sécurité, ce qui signifie que les langages mis en oeuvre doivent être maîtrisé.
    C'est d'ailleurs pour cela que 99 % des personnes qui veulent réaliser des opérations de cette nature ne s'embête pas avec une Applet, mais crée généralement un code php, qui ayant l'avantage de s'exécuter sur le serveur élimine tous les problème de sécurité que l'on rencontre avec une applet, qui je le rappel, tourne non pas sur le serveur, mais sur le poste du visiteur. On peut faire l'équivalent du php en Java, mais alors il ne faut plus développer une Applet, mais une Servlet.
    J'espère ne pas t'avoir trop découragé, mais si tu veux plus d'aide, n'hésite pas à demander, avec plus de détails sur ta topologie réseau, je peux sans problème t'aider à réaliser l'applet, la servelet voir même le code php.

    Allez, bon courage et bonne chance.

    P.S. :
    Attention, si tu ouvres les ports, ne te contente pas d'un anonymous sans mots de passes. Sans quoi, je ne donne pas plus d'un quart d'heure, au mieux quelques jours, avant de trouver ton serveur planté avec un MySQL complètement flingué. Il est impératif de bien configurer MySQL et de créer des utilisateurs qui demandent un mot de passe. Là aussi, MySQL documente sa configuration assez complètement pour sécuriser correctement un serveur MySQL avant de le mettre en ligne sur Internet. Sinon, c'est la catastrophe assurée.
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

  3. #3
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Février 2007
    Messages : 38
    Points : 26
    Points
    26
    Par défaut
    Grand merci à toi Pursang !!

    Désolé de ne répondre que maintenant mais je croyais ne plus avoir de réponse .

    Quoi qu'il en soit j'avais mal compris un truc comme tu l'as écris.. Les applets ne s'exécutent que chez le client!!! Dommage!

    Quoi qu'il en soit je pense passer par les servlets car il semble en effet que ce soit la solution la meilleure solution à mon problème... Mais il me faudra juste un peu plus de temps car je n'en ai jamais fait... Mais j'ai bon espoir,google est mon ami et puis j'ai pas le choix .
    Je note ta proposition dans un coin, si jamais j'ai de grosses difficultés avec tomcat et les servlets...

    Merci encore, pour cette réponse très complète!

  4. #4
    Membre chevronné
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Points : 1 787
    Points
    1 787
    Par défaut
    N'oublie pas de mettre en

  5. #5
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Février 2007
    Messages : 38
    Points : 26
    Points
    26
    Par défaut
    Je pensais le faire une fois que j'aurrais réalisé mon servlet
    Mais puisque la réponse à ma question principale a été donnée, tu as raison.
    Merci encore

  6. #6
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Salut,

    Je me demandais si il était possible que l'applet Java (qui s'exécute coté client) accède à la base de donné par l'intermédiaire d'un autre langage comme PHP, qu'en pensez-vous ?

  7. #7
    Membre habitué
    Homme Profil pro
    Chef de projet, développeur .net
    Inscrit en
    Juin 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet, développeur .net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2010
    Messages : 76
    Points : 136
    Points
    136
    Par défaut
    Oui, c'est tout à fait possible, tu peut te renseigner sur les web service pour ça.

    Si tu veux faire plus simple, tu peux aussi écrire des scripts php que tu appellera depuis ton applet et renverront la réponse sous la forme qui t'arrange (une page de texte de texte par exemple).

    Néanmoins il faudra toujours faire attention à ce que tes pages php ou web services ne présente pas de risques pour ton appli si utilisé autrement que par ton applet.

  8. #8
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Citation Envoyé par ElSpopo Voir le message
    Oui, c'est tout à fait possible, tu peut te renseigner sur les web service pour ça.

    Si tu veux faire plus simple, tu peux aussi écrire des scripts php que tu appellera depuis ton applet et renverront la réponse sous la forme qui t'arrange (une page de texte de texte par exemple).

    Néanmoins il faudra toujours faire attention à ce que tes pages php ou web services ne présente pas de risques pour ton appli si utilisé autrement que par ton applet.
    Ok merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Faire communiquer une application GWT avec une applet Java ?
    Par Beginner. dans le forum GWT et Vaadin
    Réponses: 1
    Dernier message: 08/02/2013, 21h16
  2. downloader un fichier avec une applet JAVA
    Par jacques64 dans le forum Applets
    Réponses: 2
    Dernier message: 03/09/2007, 11h18
  3. Installer mysql avec une application JAVA
    Par banania dans le forum JDBC
    Réponses: 7
    Dernier message: 12/05/2007, 19h08
  4. Ecriture dans un fichier avec une applet Java
    Par foued_scorpion dans le forum Applets
    Réponses: 1
    Dernier message: 25/10/2006, 11h30
  5. [Stratégie] Auditer machine avec une applet java
    Par nsaybi dans le forum Applets
    Réponses: 21
    Dernier message: 21/10/2006, 18h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo