Newsgroup: it.comp.java
Titolo: Servlet chiama servlet

Ciao a tutti.
Ho una servlet che puo' essere richiamata direttamente dalla propria
url, nel qual caso mostra la normale schermata di login, oppure da un
link in un'altra servlet. Vorrei fare in modo che in questo secondo caso
la servlet si accorga che l'utente era gia' stato autenticato (dalla
servlet di provenienza) e non richieda una nuova autenticazione.
Qualche suggerimento??
Grazie!
Fabio

servlet di provenienza) e non richieda una nuova autenticazione.
Metti in sessione un attributo di autenticazione:
	HttpSession session=request.getSession();
	String auth=(String)session.getAttribute("AUTH");
	if("OK".equals(auth))
	{
		//qui il codice della "seconda passata"
	}
	else
	{
		//qui il codice di autenticazione
		request.getSession().setAttrubute("AUTH","OK");
	}
Cosě č estremamente "basic", ma dovrebbe darti lo spunto...

 Metti in sessione un attributo di autenticazione:
[...]
Si', questo e' quello che si fa normalmente in una servlet con
autenticazione.
Ma il mio problema e' come "passare" alla seconda servlet la sessione
della prima, o meglio, come passargli una una nuova sessione con gia'
settato un attributo di autenticazione, dato che poi la navigazione
dovrebbe poter proseguire parallelamente e indipendentemente nelle due
finestre risultanti.
Forse e' una cosa banale da fare, ma sono alle prime armi con questa
roba...
Fabio

finestre risultanti.
Non avevi specificato che le due servlet vengono visualizzate in due
finestre del browser diverse. Se però una finestra è stata aperta
dall'altra dovrebbero condividere la sessione. Questo, almeno, con i
browser che ho modo di testare...

Maurizio Testa wrote:

A me non lo fa :(
In ogni caso non dovrebbero condividere la sessione, ma la prima servlet
dovrebbe fare in modo che la seconda trovi gia' l'attributo di
autenticazione settato nella propria sessione.
Fabio

A me non lo fa :(
Strano: Ho appena fatto un test con due jsp...
// file prima.jsp
<%session.setAttribute("test","ok");%>
<html>
	<head>
		<title>
			Prima
		</title>
	</head>
	<body>
		<a href="seconda.jsp" target="seconda">
			seconda
		</a>
	</body>
</html>
-- 
// file seconda.jsp
<html>
	<head>
		<title>
			Seconda
		</title>
	</head>
	<body>
		<%=session.getAttribute("test")%>
	</body>
</html>
-- 
Mi sembra funzionare correttamente...

 Strano: Ho appena fatto un test con due jsp...
Scusa ma io sto parlando di due servlet, non due jsp...
Fabio

 Scusa ma io sto parlando di due servlet, non due jsp...
E' la stessa cosa! Una JSP non č nient'altro che una servlet.

 E' la stessa cosa! Una JSP non è nient'altro che una servlet.
m...
ve l'avevo detto che ero alle prime armi :)
quindi, traducendo l'esempio di cui sopra in una servlet come dovrei
fare?
le mie due servlet hanno questa struttura:
public class MiaServlet extends HttpServlet {
    public void init(ServletConfig conf) throws ServletException  {
      super.init(conf);
    ...
    }
    public void doGet (HttpServletRequest req, HttpServletResponse res)
 throws ServletException, IOException {
 String url = "";
 HttpSession session = req.getSession();
 String op = req.getParameter("op");
 String login = (String) session.getAttribute("Login");
 if (login == null) {
     // L'utente non e' autenticato => lo mando alla pagina di login
} else {
     // L'utente e' autenticato: gestisco le op
  if (op.equals("qualcosa")) {
    //gestisco l'op
    url = "qualchepagina";
  }
}
 ServletContext sc = getServletContext();
 RequestDispatcher rd = sc.getRequestDispatcher(url);
 rd.forward(req, res);
}
    public void doPost(HttpServletRequest request, HttpServletResponse
response)
 throws ServletException, IOException {
 doGet(request, response);
 }
Fermo restando che, come ho detto, la seconda servlet dovrebbe aprirsi
in una nuova finestra e la navigazione dovrebbe poter proseguire
indipendentemente nelle due finestre. quindi alla fine non voglio
condividere la stessa sessione nelle due servlet, ma la prima servlet
dovrebbe fare in modo che la seconda trovi gia' l'attributo di
autenticazione settato nella propria (nuova) sessione.
Grazie per la pazienza!
Fabio