Est-ce que quelqu'un est capable de me dire s'il est possible de récupérer
quelconques informations sur un utilisateur ayant été autorisé à accéder à
une zone restreinte d'une webapp.
Je m'explique :
Dans ma webapp j'ai un répertoire spécifique qui nécessite d'être identifié
pour y accéder. Je souhaite réaliser cela avec un formulaire html classique
(généré par une jsp mais peu importe) auquel fait appel automatiquement
Tomcat lorsque l'on demande n'importe quelle url de ce répertoire.
Jusque là, pas de pb, ça fonctionne. L'accès au répertoire en question fait
bien appel à mon formulaire et lorsque je m'identifie correctement je
parviens à accéder à cette zone.
Ce que j'aimerais à présent, c'est de pouvoir connaître l'identité de la
personne qui s'est connectée. Or, Tomcat se chargeant de l'identification
automatiquement, il ne semble pas fournir d'infos à ce niveau, même si l'on
met une jsp comme page d'accueil une fois identifié.
Voici ce que j'ai mis dans mon fichier web.xml afin que vous puissiez situer
ma manipulation :
Donc j'utilise un formulaire HTML plutôt que la fenêtre standard ouverte par
le navigateur dans ce genre de requête.
Ceux qui ont déjà utilisé ce genre de chose auront peut-être déjà compris où
je veux en venir...
Dans le cas d'une méthode <auth-method>BASIC</auth-method>, je comprends
qu'il ne puisse pas être possible de récupérer d'infos sur l'utilisateur qui
s'identifie mais dans le cas d'un formulaire html, j'ai plus de mal.
Cependant, je comprends que le mécanisme intrinsèque soit le même.
Donc, a-t-on un moyen quelconque de connaître l'identité de celui qui se
connecte?
Voici au cas où, des infos complémentaires :
-------------------------------------------------------------
- autres extrais de mon web.xml :
-------------------------------------------------------------
<security-constraint>
<web-resource-collection>
<web-resource-name>ZoneRestreinte</web-resource-name>
<url-pattern>/zonerestreinte/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>family</role-name>
</auth-constraint>
</security-constraint>
<security-role>
<description>L'identification est requise pour l'accès à l'espace
Réservé</description>
<role-name>family</role-name>
</security-role>
Le code que j'utilise dans ma jsp pour voir si je peux recevoir des infos de
Tomcat sur l'identité de l'utilisateur (ça peut toujours servir à d'autres
;-) )
- Les seules infos que je peux tirer de tout ça, dans ce cas précis, ne sont
que celles venant des Headers : referer, accept.machin, etc. mais rien de
très intéressant.
- La session n'a pas d'attribut ... bref que dalle!
Bon si y a pas moyen c'est dommage mais c'est pas catastrophique, je gèrerai
tout ça d'une manière plus classique...
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
sly
Hello,
Est-ce que quelqu'un est capable de me dire s'il est possible de récupérer quelconques informations sur un utilisateur ayant été autorisé à accéder à une zone restreinte d'une webapp.
Je m'explique :
Dans ma webapp j'ai un répertoire spécifique qui nécessite d'être identifié pour y accéder. Je souhaite réaliser cela avec un formulaire html classique (généré par une jsp mais peu importe) auquel fait appel automatiquement Tomcat lorsque l'on demande n'importe quelle url de ce répertoire. Jusque là, pas de pb, ça fonctionne. L'accès au répertoire en question fait bien appel à mon formulaire et lorsque je m'identifie correctement je parviens à accéder à cette zone. Ce que j'aimerais à présent, c'est de pouvoir connaître l'identité de la personne qui s'est connectée. Or, Tomcat se chargeant de l'identification automatiquement, il ne semble pas fournir d'infos à ce niveau, même si l'on met une jsp comme page d'accueil une fois identifié.
Voici ce que j'ai mis dans mon fichier web.xml afin que vous puissiez situer ma manipulation :
Donc j'utilise un formulaire HTML plutôt que la fenêtre standard ouverte par le navigateur dans ce genre de requête. Ceux qui ont déjà utilisé ce genre de chose auront peut-être déjà compris où je veux en venir...
Dans le cas d'une méthode <auth-method>BASIC</auth-method>, je comprends qu'il ne puisse pas être possible de récupérer d'infos sur l'utilisateur qui s'identifie mais dans le cas d'un formulaire html, j'ai plus de mal. Cependant, je comprends que le mécanisme intrinsèque soit le même.
Donc, a-t-on un moyen quelconque de connaître l'identité de celui qui se connecte?
Voici au cas où, des infos complémentaires :
------------------------------------------------------------- - autres extrais de mon web.xml : ------------------------------------------------------------- <security-constraint> <web-resource-collection> <web-resource-name>ZoneRestreinte</web-resource-name> <url-pattern>/zonerestreinte/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>family</role-name> </auth-constraint> </security-constraint>
<security-role> <description>L'identification est requise pour l'accès à l'espace Réservé</description> <role-name>family</role-name> </security-role>
Le code que j'utilise dans ma jsp pour voir si je peux recevoir des infos de Tomcat sur l'identité de l'utilisateur (ça peut toujours servir à d'autres ;-) )
- Les seules infos que je peux tirer de tout ça, dans ce cas précis, ne sont que celles venant des Headers : referer, accept.machin, etc. mais rien de très intéressant. - La session n'a pas d'attribut ... bref que dalle!
Bon si y a pas moyen c'est dommage mais c'est pas catastrophique, je gèrerai tout ça d'une manière plus classique...
Merci d'avance pour vos lumières
Adobex
Bonjour,
à mon avis, essaye la méthode getRemoteUser() de l'interface HttpServletRequest. Cela permet de récupérer le login de l'utilisateur authentifé à la fois via [FORM] ou [BASIC]. Pour tester si ton utilisateur a le rôle requis, tu peux utiliser la méthode isUserInRole(String myRole).
De façon générale, jette un coup d'oeil sur ce lien : http://java.sun.com/j2ee/1.4/docs/api/javax/servlet/http/HttpServletRequest.html
Sly
Hello,
Est-ce que quelqu'un est capable de me dire s'il est possible de récupérer
quelconques informations sur un utilisateur ayant été autorisé à accéder à
une zone restreinte d'une webapp.
Je m'explique :
Dans ma webapp j'ai un répertoire spécifique qui nécessite d'être identifié
pour y accéder. Je souhaite réaliser cela avec un formulaire html classique
(généré par une jsp mais peu importe) auquel fait appel automatiquement
Tomcat lorsque l'on demande n'importe quelle url de ce répertoire.
Jusque là, pas de pb, ça fonctionne. L'accès au répertoire en question fait
bien appel à mon formulaire et lorsque je m'identifie correctement je
parviens à accéder à cette zone.
Ce que j'aimerais à présent, c'est de pouvoir connaître l'identité de la
personne qui s'est connectée. Or, Tomcat se chargeant de l'identification
automatiquement, il ne semble pas fournir d'infos à ce niveau, même si l'on
met une jsp comme page d'accueil une fois identifié.
Voici ce que j'ai mis dans mon fichier web.xml afin que vous puissiez situer
ma manipulation :
Donc j'utilise un formulaire HTML plutôt que la fenêtre standard ouverte par
le navigateur dans ce genre de requête.
Ceux qui ont déjà utilisé ce genre de chose auront peut-être déjà compris où
je veux en venir...
Dans le cas d'une méthode <auth-method>BASIC</auth-method>, je comprends
qu'il ne puisse pas être possible de récupérer d'infos sur l'utilisateur qui
s'identifie mais dans le cas d'un formulaire html, j'ai plus de mal.
Cependant, je comprends que le mécanisme intrinsèque soit le même.
Donc, a-t-on un moyen quelconque de connaître l'identité de celui qui se
connecte?
Voici au cas où, des infos complémentaires :
-------------------------------------------------------------
- autres extrais de mon web.xml :
-------------------------------------------------------------
<security-constraint>
<web-resource-collection>
<web-resource-name>ZoneRestreinte</web-resource-name>
<url-pattern>/zonerestreinte/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>family</role-name>
</auth-constraint>
</security-constraint>
<security-role>
<description>L'identification est requise pour l'accès à l'espace
Réservé</description>
<role-name>family</role-name>
</security-role>
Le code que j'utilise dans ma jsp pour voir si je peux recevoir des infos de
Tomcat sur l'identité de l'utilisateur (ça peut toujours servir à d'autres
;-) )
- Les seules infos que je peux tirer de tout ça, dans ce cas précis, ne sont
que celles venant des Headers : referer, accept.machin, etc. mais rien de
très intéressant.
- La session n'a pas d'attribut ... bref que dalle!
Bon si y a pas moyen c'est dommage mais c'est pas catastrophique, je gèrerai
tout ça d'une manière plus classique...
Merci d'avance pour vos lumières
Adobex
Bonjour,
à mon avis, essaye la méthode getRemoteUser() de l'interface
HttpServletRequest. Cela permet de récupérer le login de l'utilisateur
authentifé à la fois via [FORM] ou [BASIC].
Pour tester si ton utilisateur a le rôle requis, tu peux utiliser la
méthode isUserInRole(String myRole).
De façon générale, jette un coup d'oeil sur ce lien :
http://java.sun.com/j2ee/1.4/docs/api/javax/servlet/http/HttpServletRequest.html
Est-ce que quelqu'un est capable de me dire s'il est possible de récupérer quelconques informations sur un utilisateur ayant été autorisé à accéder à une zone restreinte d'une webapp.
Je m'explique :
Dans ma webapp j'ai un répertoire spécifique qui nécessite d'être identifié pour y accéder. Je souhaite réaliser cela avec un formulaire html classique (généré par une jsp mais peu importe) auquel fait appel automatiquement Tomcat lorsque l'on demande n'importe quelle url de ce répertoire. Jusque là, pas de pb, ça fonctionne. L'accès au répertoire en question fait bien appel à mon formulaire et lorsque je m'identifie correctement je parviens à accéder à cette zone. Ce que j'aimerais à présent, c'est de pouvoir connaître l'identité de la personne qui s'est connectée. Or, Tomcat se chargeant de l'identification automatiquement, il ne semble pas fournir d'infos à ce niveau, même si l'on met une jsp comme page d'accueil une fois identifié.
Voici ce que j'ai mis dans mon fichier web.xml afin que vous puissiez situer ma manipulation :
Donc j'utilise un formulaire HTML plutôt que la fenêtre standard ouverte par le navigateur dans ce genre de requête. Ceux qui ont déjà utilisé ce genre de chose auront peut-être déjà compris où je veux en venir...
Dans le cas d'une méthode <auth-method>BASIC</auth-method>, je comprends qu'il ne puisse pas être possible de récupérer d'infos sur l'utilisateur qui s'identifie mais dans le cas d'un formulaire html, j'ai plus de mal. Cependant, je comprends que le mécanisme intrinsèque soit le même.
Donc, a-t-on un moyen quelconque de connaître l'identité de celui qui se connecte?
Voici au cas où, des infos complémentaires :
------------------------------------------------------------- - autres extrais de mon web.xml : ------------------------------------------------------------- <security-constraint> <web-resource-collection> <web-resource-name>ZoneRestreinte</web-resource-name> <url-pattern>/zonerestreinte/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>family</role-name> </auth-constraint> </security-constraint>
<security-role> <description>L'identification est requise pour l'accès à l'espace Réservé</description> <role-name>family</role-name> </security-role>
Le code que j'utilise dans ma jsp pour voir si je peux recevoir des infos de Tomcat sur l'identité de l'utilisateur (ça peut toujours servir à d'autres ;-) )
- Les seules infos que je peux tirer de tout ça, dans ce cas précis, ne sont que celles venant des Headers : referer, accept.machin, etc. mais rien de très intéressant. - La session n'a pas d'attribut ... bref que dalle!
Bon si y a pas moyen c'est dommage mais c'est pas catastrophique, je gèrerai tout ça d'une manière plus classique...
Merci d'avance pour vos lumières
Adobex
Bonjour,
à mon avis, essaye la méthode getRemoteUser() de l'interface HttpServletRequest. Cela permet de récupérer le login de l'utilisateur authentifé à la fois via [FORM] ou [BASIC]. Pour tester si ton utilisateur a le rôle requis, tu peux utiliser la méthode isUserInRole(String myRole).
De façon générale, jette un coup d'oeil sur ce lien : http://java.sun.com/j2ee/1.4/docs/api/javax/servlet/http/HttpServletRequest.html
Sly
Adobex
Ben voilà, c'est nickel :) Merci, Sly, j'avais pas pensé à chercher de côté là.
Maintenant j'ai une autre question (sur laquelle je n'ai pas encore fait de recherche), c'est comment contrôler l'accès à une image (par exemple), si je souhaite différencier les utilisateurs ayant le droit ou non de la voir (avec un role identique). Bon, à priori il vaut mieux jouer sur les roles que sur un utilisateur en particulier mais par exemple, si la ressource demandée de l'accès restreint est une page jsp, avec les infos que tu m'as donné, je peux aisément différencier le comportement de celle-ci. Or, si c'est une image c'est plus dur... Est-ce possible finalement?
Voilà, merci encore
Adobex
Bonjour,
à mon avis, essaye la méthode getRemoteUser() de l'interface HttpServletRequest. Cela permet de récupérer le login de l'utilisateur authentifé à la fois via [FORM] ou [BASIC]. Pour tester si ton utilisateur a le rôle requis, tu peux utiliser la méthode isUserInRole(String myRole).
De façon générale, jette un coup d'oeil sur ce lien :
Ben voilà, c'est nickel :)
Merci, Sly, j'avais pas pensé à chercher de côté là.
Maintenant j'ai une autre question (sur laquelle je n'ai pas encore fait de
recherche), c'est comment contrôler l'accès à une image (par exemple), si je
souhaite différencier les utilisateurs ayant le droit ou non de la voir
(avec un role identique). Bon, à priori il vaut mieux jouer sur les roles
que sur un utilisateur en particulier mais par exemple, si la ressource
demandée de l'accès restreint est une page jsp, avec les infos que tu m'as
donné, je peux aisément différencier le comportement de celle-ci. Or, si
c'est une image c'est plus dur... Est-ce possible finalement?
Voilà, merci encore
Adobex
Bonjour,
à mon avis, essaye la méthode getRemoteUser() de l'interface
HttpServletRequest. Cela permet de récupérer le login de l'utilisateur
authentifé à la fois via [FORM] ou [BASIC].
Pour tester si ton utilisateur a le rôle requis, tu peux utiliser la
méthode isUserInRole(String myRole).
De façon générale, jette un coup d'oeil sur ce lien :
Ben voilà, c'est nickel :) Merci, Sly, j'avais pas pensé à chercher de côté là.
Maintenant j'ai une autre question (sur laquelle je n'ai pas encore fait de recherche), c'est comment contrôler l'accès à une image (par exemple), si je souhaite différencier les utilisateurs ayant le droit ou non de la voir (avec un role identique). Bon, à priori il vaut mieux jouer sur les roles que sur un utilisateur en particulier mais par exemple, si la ressource demandée de l'accès restreint est une page jsp, avec les infos que tu m'as donné, je peux aisément différencier le comportement de celle-ci. Or, si c'est une image c'est plus dur... Est-ce possible finalement?
Voilà, merci encore
Adobex
Bonjour,
à mon avis, essaye la méthode getRemoteUser() de l'interface HttpServletRequest. Cela permet de récupérer le login de l'utilisateur authentifé à la fois via [FORM] ou [BASIC]. Pour tester si ton utilisateur a le rôle requis, tu peux utiliser la méthode isUserInRole(String myRole).
De façon générale, jette un coup d'oeil sur ce lien :
Ben voilà, c'est nickel :) Merci, Sly, j'avais pas pensé à chercher de côté là.
de rien
Maintenant j'ai une autre question (sur laquelle je n'ai pas encore fait de
recherche), c'est comment contrôler l'accès à une image (par exemple), si je
souhaite différencier les utilisateurs ayant le droit ou non de la voir (avec un role identique). Bon, à priori il vaut mieux jouer sur les roles que sur un utilisateur en particulier en effet
mais par exemple, si la ressource demandée de l'accès restreint est une page jsp, avec les infos que tu m'as
donné, je peux aisément différencier le comportement de celle-ci. Or, si c'est une image c'est plus dur... Est-ce possible finalement?
Voilà, merci encore
Adobex
oui c'est possible. Voici quelle serait ma solution. (Je ne dis pas que c'est la seule ou la meilleure)
Tu ne veux pas que les utilisateurs non authentifiés accèdent à tes images. Or justement, le répertoire WEB-INF n'est pas accessible d'aprés les specs J2EE depuis un poste client distant. C'est donc bien ici qu'il faut placer tes images sécurisées. Créé un répertoire /img dans ton WEB-INF et mets-y toutes tes images.
Ensuite, créé une page jsp qui contient une balise img comme suit :
cette balise va appeler une servlet pour charger ton image sécurisée. Il ne reste plus qu'à créer cette servlet. En voici les grandes lignes :
/** * @version 1.0 * @author Sly */ public class GetImageServlet extends HttpServlet implements Servlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String rootPath = getServletContext().getRealPath("."); BufferedInputStream fin = null;
try { // si l'utilisateur a les droits if( req.isUserInRole("imageViewer")) { // on retourne l'image sécurisée correspondant à l'ID donne // en parametre String id = req.getParameter("id"); fin = new BufferedInputStream(new FileInputStream( rootPath+"/WEB-INF/img/"+id+".gif"));
} else { // sinon on retourne une image bidon fin = new BufferedInputStream(new FileInputStream( rootPath+"/WEB-INF/img/illegalAccess.gif")); }
// ULTRA IMPORTANT resp.setContentType("image/gif");
// on envoie l'image a travers le tuyau... // faudra voir a optimiser ca OutputStream out = resp.getOutputStream(); int b = -1; while((b = fin.read()) !=-1) { out.write(b); }
// ca aussi c'est important out.flush(); } finally {
// important egalement !!! if( fin != null){ try {fin.close();} catch(IOException ioe){} } } }// end doGet }// end class
Note : il est inutile d'implémenter doPost car la balise <img> ne fait que des Get.
Sly
Ben voilà, c'est nickel :)
Merci, Sly, j'avais pas pensé à chercher de côté là.
de rien
Maintenant j'ai une autre question (sur laquelle je n'ai pas encore
fait de
recherche), c'est comment contrôler l'accès à une image (par
exemple), si je
souhaite différencier les utilisateurs ayant le droit ou non de la voir
(avec un role identique). Bon, à priori il vaut mieux jouer sur les roles
que sur un utilisateur en particulier
en effet
mais par exemple, si la ressource
demandée de l'accès restreint est une page jsp, avec les infos que tu
m'as
donné, je peux aisément différencier le comportement de celle-ci. Or, si
c'est une image c'est plus dur... Est-ce possible finalement?
Voilà, merci encore
Adobex
oui c'est possible.
Voici quelle serait ma solution. (Je ne dis pas que c'est la seule ou la
meilleure)
Tu ne veux pas que les utilisateurs non authentifiés accèdent à tes
images. Or justement, le répertoire WEB-INF n'est pas accessible d'aprés
les specs J2EE depuis un poste client distant. C'est donc bien ici qu'il
faut placer tes images sécurisées. Créé un répertoire /img dans ton
WEB-INF et mets-y toutes tes images.
Ensuite, créé une page jsp qui contient une balise img comme suit :
cette balise va appeler une servlet pour charger ton image sécurisée. Il
ne reste plus qu'à créer cette servlet. En voici les grandes lignes :
/**
* @version 1.0
* @author Sly
*/
public class GetImageServlet extends HttpServlet implements Servlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String rootPath = getServletContext().getRealPath(".");
BufferedInputStream fin = null;
try {
// si l'utilisateur a les droits
if( req.isUserInRole("imageViewer")) {
// on retourne l'image sécurisée correspondant à l'ID donne
// en parametre
String id = req.getParameter("id");
fin = new BufferedInputStream(new FileInputStream(
rootPath+"/WEB-INF/img/"+id+".gif"));
} else {
// sinon on retourne une image bidon
fin = new BufferedInputStream(new FileInputStream(
rootPath+"/WEB-INF/img/illegalAccess.gif"));
}
// ULTRA IMPORTANT
resp.setContentType("image/gif");
// on envoie l'image a travers le tuyau...
// faudra voir a optimiser ca
OutputStream out = resp.getOutputStream();
int b = -1;
while((b = fin.read()) !=-1) {
out.write(b);
}
// ca aussi c'est important
out.flush();
} finally {
// important egalement !!!
if( fin != null){
try {fin.close();} catch(IOException ioe){}
}
}
}// end doGet
}// end class
Note : il est inutile d'implémenter doPost car la balise <img> ne fait
que des Get.
Ben voilà, c'est nickel :) Merci, Sly, j'avais pas pensé à chercher de côté là.
de rien
Maintenant j'ai une autre question (sur laquelle je n'ai pas encore fait de
recherche), c'est comment contrôler l'accès à une image (par exemple), si je
souhaite différencier les utilisateurs ayant le droit ou non de la voir (avec un role identique). Bon, à priori il vaut mieux jouer sur les roles que sur un utilisateur en particulier en effet
mais par exemple, si la ressource demandée de l'accès restreint est une page jsp, avec les infos que tu m'as
donné, je peux aisément différencier le comportement de celle-ci. Or, si c'est une image c'est plus dur... Est-ce possible finalement?
Voilà, merci encore
Adobex
oui c'est possible. Voici quelle serait ma solution. (Je ne dis pas que c'est la seule ou la meilleure)
Tu ne veux pas que les utilisateurs non authentifiés accèdent à tes images. Or justement, le répertoire WEB-INF n'est pas accessible d'aprés les specs J2EE depuis un poste client distant. C'est donc bien ici qu'il faut placer tes images sécurisées. Créé un répertoire /img dans ton WEB-INF et mets-y toutes tes images.
Ensuite, créé une page jsp qui contient une balise img comme suit :
cette balise va appeler une servlet pour charger ton image sécurisée. Il ne reste plus qu'à créer cette servlet. En voici les grandes lignes :
/** * @version 1.0 * @author Sly */ public class GetImageServlet extends HttpServlet implements Servlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String rootPath = getServletContext().getRealPath("."); BufferedInputStream fin = null;
try { // si l'utilisateur a les droits if( req.isUserInRole("imageViewer")) { // on retourne l'image sécurisée correspondant à l'ID donne // en parametre String id = req.getParameter("id"); fin = new BufferedInputStream(new FileInputStream( rootPath+"/WEB-INF/img/"+id+".gif"));
} else { // sinon on retourne une image bidon fin = new BufferedInputStream(new FileInputStream( rootPath+"/WEB-INF/img/illegalAccess.gif")); }
// ULTRA IMPORTANT resp.setContentType("image/gif");
// on envoie l'image a travers le tuyau... // faudra voir a optimiser ca OutputStream out = resp.getOutputStream(); int b = -1; while((b = fin.read()) !=-1) { out.write(b); }
// ca aussi c'est important out.flush(); } finally {
// important egalement !!! if( fin != null){ try {fin.close();} catch(IOException ioe){} } } }// end doGet }// end class
Note : il est inutile d'implémenter doPost car la balise <img> ne fait que des Get.
Sly
Adobex
Ok, merci de nouveau, au moins j'ai le code tout prêt pour faire ce que j'aurais pu faire dès le départ en fait, puisque ta méthode revient à masquer chaque image par un id. Mais comme je suis "faineant" et pour d'autres raisons, je souhaiterais éviter de renommer tous mes fichiers image ou autres.
Bien, donc si quelqu'un à une solution plus proche de ce que je souhaite faire, je suis preneur ;-)
Adobex
oui c'est possible. Voici quelle serait ma solution. (Je ne dis pas que c'est la seule ou la meilleure)
Tu ne veux pas que les utilisateurs non authentifiés accèdent à tes images. Or justement, le répertoire WEB-INF n'est pas accessible d'aprés les specs J2EE depuis un poste client distant. C'est donc bien ici qu'il faut placer tes images sécurisées. Créé un répertoire /img dans ton WEB-INF et mets-y toutes tes images.
Ensuite, créé une page jsp qui contient une balise img comme suit :
cette balise va appeler une servlet pour charger ton image sécurisée. Il ne reste plus qu'à créer cette servlet. En voici les grandes lignes :
/** * @version 1.0 * @author Sly */ public class GetImageServlet extends HttpServlet implements Servlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String rootPath = getServletContext().getRealPath("."); BufferedInputStream fin = null;
try { // si l'utilisateur a les droits if( req.isUserInRole("imageViewer")) { // on retourne l'image sécurisée correspondant à l'ID donne // en parametre String id = req.getParameter("id"); fin = new BufferedInputStream(new FileInputStream( rootPath+"/WEB-INF/img/"+id+".gif"));
} else { // sinon on retourne une image bidon fin = new BufferedInputStream(new FileInputStream( rootPath+"/WEB-INF/img/illegalAccess.gif")); }
// ULTRA IMPORTANT resp.setContentType("image/gif");
// on envoie l'image a travers le tuyau... // faudra voir a optimiser ca OutputStream out = resp.getOutputStream(); int b = -1; while((b = fin.read()) !=-1) { out.write(b); }
// ca aussi c'est important out.flush(); } finally {
// important egalement !!! if( fin != null){ try {fin.close();} catch(IOException ioe){} } } }// end doGet }// end class
Note : il est inutile d'implémenter doPost car la balise <img> ne fait que des Get.
Sly
Ok, merci de nouveau, au moins j'ai le code tout prêt pour faire ce que
j'aurais pu faire dès le départ en fait, puisque ta méthode revient à
masquer chaque image par un id. Mais comme je suis "faineant" et pour
d'autres raisons, je souhaiterais éviter de renommer tous mes fichiers image
ou autres.
Bien, donc si quelqu'un à une solution plus proche de ce que je souhaite
faire, je suis preneur ;-)
Adobex
oui c'est possible.
Voici quelle serait ma solution. (Je ne dis pas que c'est la seule ou la
meilleure)
Tu ne veux pas que les utilisateurs non authentifiés accèdent à tes
images. Or justement, le répertoire WEB-INF n'est pas accessible d'aprés
les specs J2EE depuis un poste client distant. C'est donc bien ici qu'il
faut placer tes images sécurisées. Créé un répertoire /img dans ton
WEB-INF et mets-y toutes tes images.
Ensuite, créé une page jsp qui contient une balise img comme suit :
cette balise va appeler une servlet pour charger ton image sécurisée. Il
ne reste plus qu'à créer cette servlet. En voici les grandes lignes :
/**
* @version 1.0
* @author Sly
*/
public class GetImageServlet extends HttpServlet implements Servlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String rootPath = getServletContext().getRealPath(".");
BufferedInputStream fin = null;
try {
// si l'utilisateur a les droits
if( req.isUserInRole("imageViewer")) {
// on retourne l'image sécurisée correspondant à l'ID donne
// en parametre
String id = req.getParameter("id");
fin = new BufferedInputStream(new FileInputStream(
rootPath+"/WEB-INF/img/"+id+".gif"));
} else {
// sinon on retourne une image bidon
fin = new BufferedInputStream(new FileInputStream(
rootPath+"/WEB-INF/img/illegalAccess.gif"));
}
// ULTRA IMPORTANT
resp.setContentType("image/gif");
// on envoie l'image a travers le tuyau...
// faudra voir a optimiser ca
OutputStream out = resp.getOutputStream();
int b = -1;
while((b = fin.read()) !=-1) {
out.write(b);
}
// ca aussi c'est important
out.flush();
} finally {
// important egalement !!!
if( fin != null){
try {fin.close();} catch(IOException ioe){}
}
}
}// end doGet
}// end class
Note : il est inutile d'implémenter doPost car la balise <img> ne fait
que des Get.
Ok, merci de nouveau, au moins j'ai le code tout prêt pour faire ce que j'aurais pu faire dès le départ en fait, puisque ta méthode revient à masquer chaque image par un id. Mais comme je suis "faineant" et pour d'autres raisons, je souhaiterais éviter de renommer tous mes fichiers image ou autres.
Bien, donc si quelqu'un à une solution plus proche de ce que je souhaite faire, je suis preneur ;-)
Adobex
oui c'est possible. Voici quelle serait ma solution. (Je ne dis pas que c'est la seule ou la meilleure)
Tu ne veux pas que les utilisateurs non authentifiés accèdent à tes images. Or justement, le répertoire WEB-INF n'est pas accessible d'aprés les specs J2EE depuis un poste client distant. C'est donc bien ici qu'il faut placer tes images sécurisées. Créé un répertoire /img dans ton WEB-INF et mets-y toutes tes images.
Ensuite, créé une page jsp qui contient une balise img comme suit :
cette balise va appeler une servlet pour charger ton image sécurisée. Il ne reste plus qu'à créer cette servlet. En voici les grandes lignes :
/** * @version 1.0 * @author Sly */ public class GetImageServlet extends HttpServlet implements Servlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String rootPath = getServletContext().getRealPath("."); BufferedInputStream fin = null;
try { // si l'utilisateur a les droits if( req.isUserInRole("imageViewer")) { // on retourne l'image sécurisée correspondant à l'ID donne // en parametre String id = req.getParameter("id"); fin = new BufferedInputStream(new FileInputStream( rootPath+"/WEB-INF/img/"+id+".gif"));
} else { // sinon on retourne une image bidon fin = new BufferedInputStream(new FileInputStream( rootPath+"/WEB-INF/img/illegalAccess.gif")); }
// ULTRA IMPORTANT resp.setContentType("image/gif");
// on envoie l'image a travers le tuyau... // faudra voir a optimiser ca OutputStream out = resp.getOutputStream(); int b = -1; while((b = fin.read()) !=-1) { out.write(b); }
// ca aussi c'est important out.flush(); } finally {
// important egalement !!! if( fin != null){ try {fin.close();} catch(IOException ioe){} } } }// end doGet }// end class
Note : il est inutile d'implémenter doPost car la balise <img> ne fait que des Get.
Sly
sly
Je pense que tu as dû mal comprendre ma méthode. Tu n'as bien entendu pas à renommer tous tes fichiers pour qu'elle fonctionne. Passe simplement en id le vrai "nom" de ton fichier image.
Sly
Ok, merci de nouveau, au moins j'ai le code tout prêt pour faire ce que j'aurais pu faire dès le départ en fait, puisque ta méthode revient à masquer chaque image par un id. Mais comme je suis "faineant" et pour d'autres raisons, je souhaiterais éviter de renommer tous mes fichiers image ou autres.
Bien, donc si quelqu'un à une solution plus proche de ce que je souhaite faire, je suis preneur ;-)
Adobex
oui c'est possible. Voici quelle serait ma solution. (Je ne dis pas que c'est la seule ou la meilleure)
Tu ne veux pas que les utilisateurs non authentifiés accèdent à tes images. Or justement, le répertoire WEB-INF n'est pas accessible d'aprés les specs J2EE depuis un poste client distant. C'est donc bien ici qu'il faut placer tes images sécurisées. Créé un répertoire /img dans ton WEB-INF et mets-y toutes tes images.
Ensuite, créé une page jsp qui contient une balise img comme suit :
cette balise va appeler une servlet pour charger ton image sécurisée. Il ne reste plus qu'à créer cette servlet. En voici les grandes lignes :
/** * @version 1.0 * @author Sly */ public class GetImageServlet extends HttpServlet implements Servlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String rootPath = getServletContext().getRealPath("."); BufferedInputStream fin = null;
try { // si l'utilisateur a les droits if( req.isUserInRole("imageViewer")) { // on retourne l'image sécurisée correspondant à l'ID donne // en parametre String id = req.getParameter("id"); fin = new BufferedInputStream(new FileInputStream( rootPath+"/WEB-INF/img/"+id+".gif"));
} else { // sinon on retourne une image bidon fin = new BufferedInputStream(new FileInputStream( rootPath+"/WEB-INF/img/illegalAccess.gif")); }
// ULTRA IMPORTANT resp.setContentType("image/gif");
// on envoie l'image a travers le tuyau... // faudra voir a optimiser ca OutputStream out = resp.getOutputStream(); int b = -1; while((b = fin.read()) !=-1) { out.write(b); }
// ca aussi c'est important out.flush(); } finally {
// important egalement !!! if( fin != null){ try {fin.close();} catch(IOException ioe){} } } }// end doGet }// end class
Note : il est inutile d'implémenter doPost car la balise <img> ne fait que des Get.
Sly
Je pense que tu as dû mal comprendre ma méthode. Tu n'as bien entendu
pas à renommer tous tes fichiers pour qu'elle fonctionne. Passe
simplement en id le vrai "nom" de ton fichier image.
Sly
Ok, merci de nouveau, au moins j'ai le code tout prêt pour faire ce que
j'aurais pu faire dès le départ en fait, puisque ta méthode revient à
masquer chaque image par un id. Mais comme je suis "faineant" et pour
d'autres raisons, je souhaiterais éviter de renommer tous mes fichiers image
ou autres.
Bien, donc si quelqu'un à une solution plus proche de ce que je souhaite
faire, je suis preneur ;-)
Adobex
oui c'est possible.
Voici quelle serait ma solution. (Je ne dis pas que c'est la seule ou la
meilleure)
Tu ne veux pas que les utilisateurs non authentifiés accèdent à tes
images. Or justement, le répertoire WEB-INF n'est pas accessible d'aprés
les specs J2EE depuis un poste client distant. C'est donc bien ici qu'il
faut placer tes images sécurisées. Créé un répertoire /img dans ton
WEB-INF et mets-y toutes tes images.
Ensuite, créé une page jsp qui contient une balise img comme suit :
cette balise va appeler une servlet pour charger ton image sécurisée. Il
ne reste plus qu'à créer cette servlet. En voici les grandes lignes :
/**
* @version 1.0
* @author Sly
*/
public class GetImageServlet extends HttpServlet implements Servlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String rootPath = getServletContext().getRealPath(".");
BufferedInputStream fin = null;
try {
// si l'utilisateur a les droits
if( req.isUserInRole("imageViewer")) {
// on retourne l'image sécurisée correspondant à l'ID donne
// en parametre
String id = req.getParameter("id");
fin = new BufferedInputStream(new FileInputStream(
rootPath+"/WEB-INF/img/"+id+".gif"));
} else {
// sinon on retourne une image bidon
fin = new BufferedInputStream(new FileInputStream(
rootPath+"/WEB-INF/img/illegalAccess.gif"));
}
// ULTRA IMPORTANT
resp.setContentType("image/gif");
// on envoie l'image a travers le tuyau...
// faudra voir a optimiser ca
OutputStream out = resp.getOutputStream();
int b = -1;
while((b = fin.read()) !=-1) {
out.write(b);
}
// ca aussi c'est important
out.flush();
} finally {
// important egalement !!!
if( fin != null){
try {fin.close();} catch(IOException ioe){}
}
}
}// end doGet
}// end class
Note : il est inutile d'implémenter doPost car la balise <img> ne fait
que des Get.
Je pense que tu as dû mal comprendre ma méthode. Tu n'as bien entendu pas à renommer tous tes fichiers pour qu'elle fonctionne. Passe simplement en id le vrai "nom" de ton fichier image.
Sly
Ok, merci de nouveau, au moins j'ai le code tout prêt pour faire ce que j'aurais pu faire dès le départ en fait, puisque ta méthode revient à masquer chaque image par un id. Mais comme je suis "faineant" et pour d'autres raisons, je souhaiterais éviter de renommer tous mes fichiers image ou autres.
Bien, donc si quelqu'un à une solution plus proche de ce que je souhaite faire, je suis preneur ;-)
Adobex
oui c'est possible. Voici quelle serait ma solution. (Je ne dis pas que c'est la seule ou la meilleure)
Tu ne veux pas que les utilisateurs non authentifiés accèdent à tes images. Or justement, le répertoire WEB-INF n'est pas accessible d'aprés les specs J2EE depuis un poste client distant. C'est donc bien ici qu'il faut placer tes images sécurisées. Créé un répertoire /img dans ton WEB-INF et mets-y toutes tes images.
Ensuite, créé une page jsp qui contient une balise img comme suit :
cette balise va appeler une servlet pour charger ton image sécurisée. Il ne reste plus qu'à créer cette servlet. En voici les grandes lignes :
/** * @version 1.0 * @author Sly */ public class GetImageServlet extends HttpServlet implements Servlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String rootPath = getServletContext().getRealPath("."); BufferedInputStream fin = null;
try { // si l'utilisateur a les droits if( req.isUserInRole("imageViewer")) { // on retourne l'image sécurisée correspondant à l'ID donne // en parametre String id = req.getParameter("id"); fin = new BufferedInputStream(new FileInputStream( rootPath+"/WEB-INF/img/"+id+".gif"));
} else { // sinon on retourne une image bidon fin = new BufferedInputStream(new FileInputStream( rootPath+"/WEB-INF/img/illegalAccess.gif")); }
// ULTRA IMPORTANT resp.setContentType("image/gif");
// on envoie l'image a travers le tuyau... // faudra voir a optimiser ca OutputStream out = resp.getOutputStream(); int b = -1; while((b = fin.read()) !=-1) { out.write(b); }
// ca aussi c'est important out.flush(); } finally {
// important egalement !!! if( fin != null){ try {fin.close();} catch(IOException ioe){} } } }// end doGet }// end class
Note : il est inutile d'implémenter doPost car la balise <img> ne fait que des Get.
Sly
Adobex
Oui effectivement ce n'est pas l'image qui doit être renommée mais c'est son url qui doit être formatée d'une certaine manière. Bon, sachant qu'en fait j'utilise JAlbum pour me générer des albums photo, je ne sais pas encore comment faire en sorte qu'il me génère mes albums avec un id en paramètre plutôt qu'un lien direct.
Je vais donc réfléchir sur la méthode que je vais employer...
Adobex
"sly" a écrit dans le message de news:41c56efa$0$23382$
Je pense que tu as dû mal comprendre ma méthode. Tu n'as bien entendu pas à renommer tous tes fichiers pour qu'elle fonctionne. Passe simplement en id le vrai "nom" de ton fichier image.
Sly
Ok, merci de nouveau, au moins j'ai le code tout prêt pour faire ce que j'aurais pu faire dès le départ en fait, puisque ta méthode revient à masquer chaque image par un id. Mais comme je suis "faineant" et pour d'autres raisons, je souhaiterais éviter de renommer tous mes fichiers image
ou autres.
Bien, donc si quelqu'un à une solution plus proche de ce que je souhaite faire, je suis preneur ;-)
Adobex
oui c'est possible. Voici quelle serait ma solution. (Je ne dis pas que c'est la seule ou la meilleure)
Tu ne veux pas que les utilisateurs non authentifiés accèdent à tes images. Or justement, le répertoire WEB-INF n'est pas accessible d'aprés les specs J2EE depuis un poste client distant. C'est donc bien ici qu'il faut placer tes images sécurisées. Créé un répertoire /img dans ton WEB-INF et mets-y toutes tes images.
Ensuite, créé une page jsp qui contient une balise img comme suit :
cette balise va appeler une servlet pour charger ton image sécurisée. Il ne reste plus qu'à créer cette servlet. En voici les grandes lignes :
/** * @version 1.0 * @author Sly */ public class GetImageServlet extends HttpServlet implements Servlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String rootPath = getServletContext().getRealPath("."); BufferedInputStream fin = null;
try { // si l'utilisateur a les droits if( req.isUserInRole("imageViewer")) { // on retourne l'image sécurisée correspondant à l'ID donne // en parametre String id = req.getParameter("id"); fin = new BufferedInputStream(new FileInputStream( rootPath+"/WEB-INF/img/"+id+".gif"));
} else { // sinon on retourne une image bidon fin = new BufferedInputStream(new FileInputStream( rootPath+"/WEB-INF/img/illegalAccess.gif")); }
// ULTRA IMPORTANT resp.setContentType("image/gif");
// on envoie l'image a travers le tuyau... // faudra voir a optimiser ca OutputStream out = resp.getOutputStream(); int b = -1; while((b = fin.read()) !=-1) { out.write(b); }
// ca aussi c'est important out.flush(); } finally {
// important egalement !!! if( fin != null){ try {fin.close();} catch(IOException ioe){} } } }// end doGet }// end class
Note : il est inutile d'implémenter doPost car la balise <img> ne fait que des Get.
Sly
Oui effectivement ce n'est pas l'image qui doit être renommée mais c'est son
url qui doit être formatée d'une certaine manière.
Bon, sachant qu'en fait j'utilise JAlbum pour me générer des albums photo,
je ne sais pas encore comment faire en sorte qu'il me génère mes albums avec
un id en paramètre plutôt qu'un lien direct.
Je vais donc réfléchir sur la méthode que je vais employer...
Adobex
"sly" <sly_xp_NO_SPAM@yahoo.fr> a écrit dans le message de
news:41c56efa$0$23382$626a14ce@news.free.fr...
Je pense que tu as dû mal comprendre ma méthode. Tu n'as bien entendu
pas à renommer tous tes fichiers pour qu'elle fonctionne. Passe
simplement en id le vrai "nom" de ton fichier image.
Sly
Ok, merci de nouveau, au moins j'ai le code tout prêt pour faire ce que
j'aurais pu faire dès le départ en fait, puisque ta méthode revient à
masquer chaque image par un id. Mais comme je suis "faineant" et pour
d'autres raisons, je souhaiterais éviter de renommer tous mes fichiers
image
ou autres.
Bien, donc si quelqu'un à une solution plus proche de ce que je souhaite
faire, je suis preneur ;-)
Adobex
oui c'est possible.
Voici quelle serait ma solution. (Je ne dis pas que c'est la seule ou la
meilleure)
Tu ne veux pas que les utilisateurs non authentifiés accèdent à tes
images. Or justement, le répertoire WEB-INF n'est pas accessible d'aprés
les specs J2EE depuis un poste client distant. C'est donc bien ici qu'il
faut placer tes images sécurisées. Créé un répertoire /img dans ton
WEB-INF et mets-y toutes tes images.
Ensuite, créé une page jsp qui contient une balise img comme suit :
cette balise va appeler une servlet pour charger ton image sécurisée. Il
ne reste plus qu'à créer cette servlet. En voici les grandes lignes :
/**
* @version 1.0
* @author Sly
*/
public class GetImageServlet extends HttpServlet implements Servlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String rootPath = getServletContext().getRealPath(".");
BufferedInputStream fin = null;
try {
// si l'utilisateur a les droits
if( req.isUserInRole("imageViewer")) {
// on retourne l'image sécurisée correspondant à l'ID donne
// en parametre
String id = req.getParameter("id");
fin = new BufferedInputStream(new FileInputStream(
rootPath+"/WEB-INF/img/"+id+".gif"));
} else {
// sinon on retourne une image bidon
fin = new BufferedInputStream(new FileInputStream(
rootPath+"/WEB-INF/img/illegalAccess.gif"));
}
// ULTRA IMPORTANT
resp.setContentType("image/gif");
// on envoie l'image a travers le tuyau...
// faudra voir a optimiser ca
OutputStream out = resp.getOutputStream();
int b = -1;
while((b = fin.read()) !=-1) {
out.write(b);
}
// ca aussi c'est important
out.flush();
} finally {
// important egalement !!!
if( fin != null){
try {fin.close();} catch(IOException ioe){}
}
}
}// end doGet
}// end class
Note : il est inutile d'implémenter doPost car la balise <img> ne fait
que des Get.
Oui effectivement ce n'est pas l'image qui doit être renommée mais c'est son url qui doit être formatée d'une certaine manière. Bon, sachant qu'en fait j'utilise JAlbum pour me générer des albums photo, je ne sais pas encore comment faire en sorte qu'il me génère mes albums avec un id en paramètre plutôt qu'un lien direct.
Je vais donc réfléchir sur la méthode que je vais employer...
Adobex
"sly" a écrit dans le message de news:41c56efa$0$23382$
Je pense que tu as dû mal comprendre ma méthode. Tu n'as bien entendu pas à renommer tous tes fichiers pour qu'elle fonctionne. Passe simplement en id le vrai "nom" de ton fichier image.
Sly
Ok, merci de nouveau, au moins j'ai le code tout prêt pour faire ce que j'aurais pu faire dès le départ en fait, puisque ta méthode revient à masquer chaque image par un id. Mais comme je suis "faineant" et pour d'autres raisons, je souhaiterais éviter de renommer tous mes fichiers image
ou autres.
Bien, donc si quelqu'un à une solution plus proche de ce que je souhaite faire, je suis preneur ;-)
Adobex
oui c'est possible. Voici quelle serait ma solution. (Je ne dis pas que c'est la seule ou la meilleure)
Tu ne veux pas que les utilisateurs non authentifiés accèdent à tes images. Or justement, le répertoire WEB-INF n'est pas accessible d'aprés les specs J2EE depuis un poste client distant. C'est donc bien ici qu'il faut placer tes images sécurisées. Créé un répertoire /img dans ton WEB-INF et mets-y toutes tes images.
Ensuite, créé une page jsp qui contient une balise img comme suit :
cette balise va appeler une servlet pour charger ton image sécurisée. Il ne reste plus qu'à créer cette servlet. En voici les grandes lignes :
/** * @version 1.0 * @author Sly */ public class GetImageServlet extends HttpServlet implements Servlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String rootPath = getServletContext().getRealPath("."); BufferedInputStream fin = null;
try { // si l'utilisateur a les droits if( req.isUserInRole("imageViewer")) { // on retourne l'image sécurisée correspondant à l'ID donne // en parametre String id = req.getParameter("id"); fin = new BufferedInputStream(new FileInputStream( rootPath+"/WEB-INF/img/"+id+".gif"));
} else { // sinon on retourne une image bidon fin = new BufferedInputStream(new FileInputStream( rootPath+"/WEB-INF/img/illegalAccess.gif")); }
// ULTRA IMPORTANT resp.setContentType("image/gif");
// on envoie l'image a travers le tuyau... // faudra voir a optimiser ca OutputStream out = resp.getOutputStream(); int b = -1; while((b = fin.read()) !=-1) { out.write(b); }
// ca aussi c'est important out.flush(); } finally {
// important egalement !!! if( fin != null){ try {fin.close();} catch(IOException ioe){} } } }// end doGet }// end class
Note : il est inutile d'implémenter doPost car la balise <img> ne fait que des Get.