giannino1995 ha scritto:
Mi spiegheresti la differenza tra 'server-root' e 'context-root'?
http://nomehost/nomecontesto/bla/bla/bla......
? ?
server-root context-root
Gli url che scrivi nel web.xml e nelle annotation @WebServlet/@WebFilter sono relativi alla context-root, perché sono sicuramente (e ovviamente) sotto la applicazione.
Quindi se una servlet l'hai mappata con es.
<servlet-mapping>
<servlet-name>XyzServlet</servlet-name>
<url-pattern>/xyzservlet.html</url-pattern>
</servlet-mapping>
Allora lo slash in
/xyzservlet.html è relativo alla context-root, ovvero la servlet risponderà a
http://nomehost/nomecontesto
/xyzservlet.html
Idem per un include/forward che sono interni alla webapp.
Diverso invece è il caso del redirect. Il redirect lo fa il client (browser), che non "sa" nulla di ciò che sta lato server (nemmeno che dietro ci sia una webapp JavaEE !). Per il client/browser sono solo url in generale e basta. Quindi per un redirect lo "/" iniziale è alla radice del server.
giannino1995 ha scritto:
Inoltre dove trovo su IntelliJ il nome della mia webapp?
Conosco poco IntelliJ IDEA. L'ho usato solo per mie esercitazioni con JavaFX e Kotlin. Mai per webapp. Tra l'altro hai la versione "Community"? Perché questa se ben ricordo NON ha supporto diretto per sviluppi in Java EE e se vuoi fare qualcosa (non so ora quanto possibile) devi "sporcarti" un po' le mani.
Comunque non so dire ora. In genere il nome del contesto è di base il nome del progetto ma può essere cambiato (in Eclipse è così).
giannino1995 ha scritto:
Inoltre mi piacerebbe creare un filtro riutilizzabile in altri progetti, se scrivo qualcosa di specifico relativo a questo progetto non credo sia il massimo.[/b]
Domandati: che cosa vorresti tenere comune (e quindi riutilizzabile) e cosa invece potrebbe cambiare da un progetto all'altro?
Ad esempio:
- l'url (o gli url) del filtro potrebbero cambiare da un progetto all'altro. In un progetto potresti avere una "/admin" e in un altro "/private" come percorso base per le zone "protette". Bene: vuol dire che NON devi usare l'annotation @WebFilter, perché altrimenti vai a "cablare", fissare nel codice l'url.
- che cosa metti in sessione. Vuoi solo mettere uno username? O altri dati dell'utente (magari un oggetto di classe User)? Questo sarebbe facilmente astraibile.
- il nome dell'attributo in sessione. Ammesso che hai deciso
cosa tenere in sessione, in un progetto potresti voler mettere un "UserID" e in un altro un "LoggedUserKey". Bene, il NOME di questo attributo lo si può parametrare con un <init-param> del filter nel web.xml.
Comunque, scusa se lo dico, ma al momento se/come rendere qualcosa riutilizzabile tra progetti diversi dovrebbe essere la tua ULTIMA preoccupazione.
giannino1995 ha scritto:
Inoltre è più corretto intercettare con il filtro la servlet responsabile dell'autenticazione ovvero la classe che crea l'attributo nella sessione oppure solo le altre? Entrambe le soluzioni sono realizzabili ma quale a tuo avviso sono quelle più corrette e prudenti?
Il filtro di cui abbiamo parlato finora lo ripeto che serve per uno scopo: IMPEDIRE ad utenti non "loggati" di accedere ad aree del sito che invece dovrebbero essere solo per utenti "autenticati".
Se la richiesta della pagina di login viene beccata anche da questo filtro .. sostanzialmente ti stai dando la classica zappa sui piedi ...
giannino1995 ha scritto:
P.S.: Infatti il tuo codice continua a darmi problemi sui redirect (lo script sotto fornisce pagina bianca e nessun errore lato IDE):
Credo ... spero, che ora hai più chiara la questione degli url.
giannino1995 ha scritto:
private static boolean isUserAuthenticating(HttpServletRequest httpReq) {
String UserID = httpReq.getParameter("UserID");
if (httpReq != null) {
return true;
}
return false;
}
Te lo ripeto ancora: questo NON ha senso. Non devi prendere un parametro UserID dalla request!!!
Il filtro potrebbe matchare tante richieste, pure a risorse "statiche" (se le metti nell'area protetta) es. .css, .js., immagini ecc..
Non ha senso cercare un parametro in questo caso.
E poi scusa if (httpReq != null) non ha senso, httpReq non può essere null a meno che hai fatto pasticci tu chiamando quel metodo.