anx721
17-12-2005, 15:36
Lo scenario è questo:
l'utente clicca su un link ad una pagina che per essere visualizzata necessita di aver fatto il login (ad esempio un utente non loggato in questo forum che clicca sul pulsante per rispondere ad una discussione.) Tramite un filtro riesco ad intercettare tutte le richieste a tali pagine e se l'utente non è loggato le ridirigo (conun forward) alla pagina di login; quando l'utente immette i dati di login, se sono corretti, voglio che ci sia il forward alla pagina originale che l'utente aveva richiesto. Ora se la richiesta originaria non conteneva parametri non ci sono problemi: quando il filtro ha processato la richiesta originale ha potuto salvare l'url richiesta che puo essere utilizzata dopo il login; se la richiesta conteneva parametri è pero un problema. Se utilizzassi solo servlet e jsp potrei salvare tutti i parametri e poi utilizzarli dopo il login. Il fatto è che sto usando Struts, chi lo conosce sa che Struts ha un flusso di richiesta/validazione dei parametri/forwording abbastanza rigido. In particolare dopo il login non possono semplicemnte fare il forward alla url originaria, perche tale url corrisponde ad un'azione che riceve un ActionForm che viene popolato automaticamente con i parametri della richiesta, ma questi parametri ora sono i prarmetri del form di login, non i parametri della richiesta originaria.
L'unca soluzione che mi viene in mente è questa:
1 - qando arriva la richiesta originaria il filtro esegue il forward alla pagina di login; questa ha un form con i campi username e password, in questo caso io dovrei inserire in tale form tanti campi hidden quanti sono i parametri inviati con la richiesta originaria in modo che vengano rispediti assieme al login;
2 - quando avviene il login l'ActionForm associato contiene i dati del login ma anche tutti i dati della richiesta originaria, per cui le richiesta può essere forwardata all'azione originaria che si ritroverà nel form i dati di cui ha bisogno.
Questa soluzione pero non funziona in generale: se ho due o più url che richiedono il login prima di essere visualizzate e che ricevono ActionForm di tipo diverso non posso stabilire a priori il tipo del form associato all'azione di login, perchè in un caso tale form contiene certi campi, in altri casi ne conteine altri; dovrei quindi usare un tipo di form dinamico, mi pare ci siano i mapped back form che consentono di racchiudere i valori dei parametri in una mappa, per cui i parametri nel form possono essere in numero arbitrario.
Vorrei sapere se cisono oluzione standard visto che mi pare uno scenario frequente, grazie e ciao.
l'utente clicca su un link ad una pagina che per essere visualizzata necessita di aver fatto il login (ad esempio un utente non loggato in questo forum che clicca sul pulsante per rispondere ad una discussione.) Tramite un filtro riesco ad intercettare tutte le richieste a tali pagine e se l'utente non è loggato le ridirigo (conun forward) alla pagina di login; quando l'utente immette i dati di login, se sono corretti, voglio che ci sia il forward alla pagina originale che l'utente aveva richiesto. Ora se la richiesta originaria non conteneva parametri non ci sono problemi: quando il filtro ha processato la richiesta originale ha potuto salvare l'url richiesta che puo essere utilizzata dopo il login; se la richiesta conteneva parametri è pero un problema. Se utilizzassi solo servlet e jsp potrei salvare tutti i parametri e poi utilizzarli dopo il login. Il fatto è che sto usando Struts, chi lo conosce sa che Struts ha un flusso di richiesta/validazione dei parametri/forwording abbastanza rigido. In particolare dopo il login non possono semplicemnte fare il forward alla url originaria, perche tale url corrisponde ad un'azione che riceve un ActionForm che viene popolato automaticamente con i parametri della richiesta, ma questi parametri ora sono i prarmetri del form di login, non i parametri della richiesta originaria.
L'unca soluzione che mi viene in mente è questa:
1 - qando arriva la richiesta originaria il filtro esegue il forward alla pagina di login; questa ha un form con i campi username e password, in questo caso io dovrei inserire in tale form tanti campi hidden quanti sono i parametri inviati con la richiesta originaria in modo che vengano rispediti assieme al login;
2 - quando avviene il login l'ActionForm associato contiene i dati del login ma anche tutti i dati della richiesta originaria, per cui le richiesta può essere forwardata all'azione originaria che si ritroverà nel form i dati di cui ha bisogno.
Questa soluzione pero non funziona in generale: se ho due o più url che richiedono il login prima di essere visualizzate e che ricevono ActionForm di tipo diverso non posso stabilire a priori il tipo del form associato all'azione di login, perchè in un caso tale form contiene certi campi, in altri casi ne conteine altri; dovrei quindi usare un tipo di form dinamico, mi pare ci siano i mapped back form che consentono di racchiudere i valori dei parametri in una mappa, per cui i parametri nel form possono essere in numero arbitrario.
Vorrei sapere se cisono oluzione standard visto che mi pare uno scenario frequente, grazie e ciao.