OVH Cloud OVH Cloud

Struts et connexion

10 réponses
Avatar
Bernard Koninckx
Bonjour à tous,

Certains d'entre vous se rappelent peut-être d'un de mes Post précédent.

Voilà, ce que je voudaris faire :
Je voudaris que lorsque j'arrive sur une page et que je ne suis pas
authentifié je sois automatiquement redirigé vers la page de connexion. Une
fois authentifié, je souhaite être redirigé vers la page qui a appelé la
page de connexion.

J'ai donc étendu la classe RequestProcessor ... mais je n'arrive toujours
pas a revenir sur la page appelante.

/*
* Created on 10-mai-2005
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Generation - Code and Comments
*/
package com.kbhits.struts;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.RequestProcessor;

/**
* @author Pat et Ben
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Generation - Code and Comments
*/
public class PersonnalRequestProcessor extends RequestProcessor {

/* (non-Javadoc)
* @see
org.apache.struts.action.RequestProcessor#processPreprocess(javax.servlet.ht
tp.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
protected boolean processPreprocess(HttpServletRequest request,
HttpServletResponse response) {

HttpSession session = request.getSession(true);

if(request.getServletPath().equals("/login.do")) return true;

if(session.getAttribute("loginInfo")!= null) {
//LE MORCEAU DE CODE SUIVANT SEMBLE NE PAS FONCTIONNER ET JE NE
COMPRENDS PAS POPURQUOI
String s = (String)session.getAttribute("nextPage");
if (s != null){
try{
request.getRequestDispatcher(s).forward(request, response);
}
catch(Exception e){}
return false;
}
else return true;
}
else {
try{
String s = request.getServletPath();
session.setAttribute("nextPage", s);
request.getRequestDispatcher("/login.do").forward(request, response);
}
catch(Exception e){}

}
return false;
}
}

Je remercie d'avance toutes les âmes charitables qui voudront bien aider le
newbie que je suis dans la programmation Struts.

Encore merci.

Bernard

10 réponses

Avatar
Lionel
Bernard Koninckx wrote:
J'ai donc étendu la classe RequestProcessor ... mais je n'arrive
toujours pas a revenir sur la page appelante.


Pourquoi ne pas se contenter de surcharger execute de Action ?
Suffit juste de retourner le bon ActionForward.

Avatar
Stephane Zuckerman
J'ai donc étendu la classe RequestProcessor ... mais je n'arrive
toujours pas a revenir sur la page appelante.


Pourquoi ne pas se contenter de surcharger execute de Action ?
Suffit juste de retourner le bon ActionForward.
De ce que j'ai compris, la vérification doit être systématique, ce qui

élimine l'utilisation d'actions pour ce travail.

En l'occurence, son problème semble venir d'une mise à jour des variables
de session qui échoue - enfin, si j'ai bien compris.
--
"Je deteste les ordinateurs : ils font toujours ce que je dis, jamais ce
que je veux !"
"The obvious mathematical breakthrough would be development of an easy
way to factor large prime numbers." (Bill Gates, The Road Ahead)


Avatar
Bernard Koninckx
Ce qui veut dire si j'ai bien compris que je dois avoir un forward pour
chaque Action/Page dans la déclaration de mon action-mapping "/login.do" ?

Merci d'avance pour vos réponses remarques et suggestions

Bernard

"Lionel" <SPAMcoollATfreePOINTfr> a écrit dans le message de
news:42886d0c$0$31088$
Bernard Koninckx wrote:
J'ai donc étendu la classe RequestProcessor ... mais je n'arrive
toujours pas a revenir sur la page appelante.


Pourquoi ne pas se contenter de surcharger execute de Action ?
Suffit juste de retourner le bon ActionForward.





Avatar
Lionel
Stephane Zuckerman wrote:
De ce que j'ai compris, la vérification doit être systématique, ce qui
élimine l'utilisation d'actions pour ce travail.


Il y a des ressources accessibles via autre chose que des actions sur son
site ?
Si oui, il suffit d'y acceder via des actions, ou d'utiliser un servlet
filter, qui me semble etre la solution la plus propre et durable plutot que
d'aller bidouiller le RequestProcessor.

Avatar
Lionel
Bernard Koninckx wrote:
Ce qui veut dire si j'ai bien compris que je dois avoir un forward
pour chaque Action/Page dans la déclaration de mon action-mapping
"/login.do" ?


non.

Suffit de faire ceci dans le execute:

si je suis ni actionLogin ni connecte {
mets string action en session
retourne vers login.
}
sinon {
super.execute
}


et à la fin de loginAction:
si string action en session
retourn new ActionForward(string action);
sinon
return mapping.findForward(acceuil);

Avatar
Stephane Zuckerman
De ce que j'ai compris, la vérification doit être systématique, ce qui
élimine l'utilisation d'actions pour ce travail.


Il y a des ressources accessibles via autre chose que des actions sur son
site ?
Si oui, il suffit d'y acceder via des actions,


Comment ? en utilisant une action "tampon" qui sait où forwarder ensuite ?
Je trouve ça crade, il y a des objets spécifiquement faits pour ça
(ActionMapping, RequestProcessor, notamment).

ou d'utiliser un servlet
filter, qui me semble etre la solution la plus propre et durable plutot que
d'aller bidouiller le RequestProcessor.


Je ne vois pas en quoi c'est de la bidouille. En gros ça revient à faire
des appels à "super" sauf pour les 3 détails à vérifier en plus.

--
"Je deteste les ordinateurs : ils font toujours ce que je dis, jamais ce
que je veux !"
"The obvious mathematical breakthrough would be development of an easy
way to factor large prime numbers." (Bill Gates, The Road Ahead)


Avatar
Bernard Koninckx
Tout doux, je vous suis plus du tout.

Quelles sont les erreurs que j'ai commises dans ma classe ? Comment puis-je
y remédier ?

J'ai essayé de mettre du code dans la méthode execute de mon action pour
faire celà aussi. Mais la configuration de l'action est frozen. Je veux pas
devoir tapper x forward pour x pages qui devraient passer par la page de
connexion.

Bernard

"Bernard Koninckx" a écrit dans le message de
news:4285f7f8$0$22986$
Bonjour à tous,

Certains d'entre vous se rappelent peut-être d'un de mes Post précédent.

Voilà, ce que je voudaris faire :
Je voudaris que lorsque j'arrive sur une page et que je ne suis pas
authentifié je sois automatiquement redirigé vers la page de connexion.
Une

fois authentifié, je souhaite être redirigé vers la page qui a appelé la
page de connexion.

J'ai donc étendu la classe RequestProcessor ... mais je n'arrive toujours
pas a revenir sur la page appelante.

/*
* Created on 10-mai-2005
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Generation - Code and Comments
*/
package com.kbhits.struts;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.RequestProcessor;

/**
* @author Pat et Ben
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Generation - Code and Comments
*/
public class PersonnalRequestProcessor extends RequestProcessor {

/* (non-Javadoc)
* @see

org.apache.struts.action.RequestProcessor#processPreprocess(javax.servlet.ht

tp.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
protected boolean processPreprocess(HttpServletRequest request,
HttpServletResponse response) {

HttpSession session = request.getSession(true);

if(request.getServletPath().equals("/login.do")) return true;

if(session.getAttribute("loginInfo")!= null) {
//LE MORCEAU DE CODE SUIVANT SEMBLE NE PAS FONCTIONNER ET JE NE
COMPRENDS PAS POPURQUOI
String s = (String)session.getAttribute("nextPage");
if (s != null){
try{
request.getRequestDispatcher(s).forward(request, response);
}
catch(Exception e){}
return false;
}
else return true;
}
else {
try{
String s = request.getServletPath();
session.setAttribute("nextPage", s);
request.getRequestDispatcher("/login.do").forward(request, response);
}
catch(Exception e){}

}
return false;
}
}

Je remercie d'avance toutes les âmes charitables qui voudront bien aider
le

newbie que je suis dans la programmation Struts.

Encore merci.

Bernard




Avatar
Lionel
Stephane Zuckerman wrote:
Il y a des ressources accessibles via autre chose que des actions
sur son site ?
Si oui, il suffit d'y acceder via des actions,


Comment ? en utilisant une action "tampon" qui sait où forwarder
ensuite ?


je ne sais pas comment. ça dépend des "actions".
Aucune resource de mes sites struts n'est accessible via autre chose qu'une
action struts (téléchargement de fichiers, ....)
J'interdis l'accès direct aux JSP.
Pas de servlet autre que celle de struts.
Bref, TOUT passe par celle ci. Du coup c'est facile de tout protéger.
Sinon, avec un filter on peut toujours s'en sortir.


En gros ça revient à
faire des appels à "super" sauf pour les 3 détails à vérifier en plus.


S'il peut s'en sortir aussi simplement ça va :)
J'ai eu peur en voyant le nombre de lignes de code qu'il lui faut pour faire
une redirection vers la page de login...


Avatar
Bernard Koninckx
Comment fais-tu pour interdire l'accès complet à tes jsp et obliger a passer
uniquement par des actions ?

Options de configuration du serveur ? Autres ...

Merci

Bernard

"Lionel" <SPAMcoollATfreePOINTfr> a écrit dans le message de
news:4288b2e7$0$31085$
Stephane Zuckerman wrote:
Il y a des ressources accessibles via autre chose que des actions
sur son site ?
Si oui, il suffit d'y acceder via des actions,


Comment ? en utilisant une action "tampon" qui sait où forwarder
ensuite ?


je ne sais pas comment. ça dépend des "actions".
Aucune resource de mes sites struts n'est accessible via autre chose
qu'une

action struts (téléchargement de fichiers, ....)
J'interdis l'accès direct aux JSP.
Pas de servlet autre que celle de struts.
Bref, TOUT passe par celle ci. Du coup c'est facile de tout protéger.
Sinon, avec un filter on peut toujours s'en sortir.


En gros ça revient à
faire des appels à "super" sauf pour les 3 détails à vérifier en plus.


S'il peut s'en sortir aussi simplement ça va :)
J'ai eu peur en voyant le nombre de lignes de code qu'il lui faut pour
faire

une redirection vers la page de login...






Avatar
Lionel
Bernard Koninckx wrote:
Comment fais-tu pour interdire l'accès complet à tes jsp et obliger a
passer uniquement par des actions ?


Version 1: tu mets toutes les JSP dans web-inf. J'aime pas mais ca marche
Version 2: un filtre qui bloque l'accès à *.jsp