URL maschera in JSF
-
20-08-2019 - |
Domanda
Ho un'applicazione enterprise scritta in JAVA con JSF (usando RichFaces 3.3). Attualmente il mio URL è simile al seguente:
http: //localhost/WebApplication/faces/folder1/page.jsp
La domanda è come posso mascherare il mio URL per renderlo così:
http: //localhost/folder1/page.jps
Fondamentalmente voglio nascondere " Applicazione / facce / "
Grazie
Soluzione
Per riscrivere gli URL all'interno dell'applicazione è possibile utilizzare UrlRewrite . Tuttavia, in questo caso sembra che tu voglia rimuovere il percorso di contesto della tua applicazione web, nel qual caso hai due opzioni:
- distribuisci la tua applicazione nel percorso di contesto
/
(come è specifico del server delle applicazioni) - esegui Apache sulla porta 80 e usa mod_proxy per delegare determinati URL al tuo server delle applicazioni in esecuzione su una porta diversa, usando una configurazione simile alla seguente.
Configurazione di Apache:
<Proxy http://localhost:8080/*>
Order Allow,Deny
Allow From All
</Proxy>
ProxyPreserveHost On
ProxyPass / http://localhost:8080/WebApplication/
ProxyPassReverse / http://localhost:8080/WebApplication/
Altri suggerimenti
Nota che / faces / è dovuto alla mappatura in web.xml
. questa è una mappatura standard per JSF, tuttavia è possibile utilizzare anche la mappatura delle estensioni, ovvero .faces
alla fine dell'URL.
Ad esempio, in un'applicazione che ho qui si trova nel file web.xml:
<servlet-mapping>
<servlet-name>Persistent Faces Servlet</servlet-name>
<url-pattern>*.faces</url-pattern>
</servlet-mapping>
Questo utilizza IceFaces, tuttavia sarà simile per te con RichFaces. Probabilmente il tuo sarà simile al seguente: <url-pattern>/faces/*</url-pattern>
. Se lo cambi per avere *.faces
come sopra, l'URL finale sarà simile al seguente:
http: //localhost/WebApplication/folder1/page.faces
Se lo usi insieme alla risposta che Peter Hilton ha dato sulla distribuzione come applicazione web di root, il tuo URL finale sarà simile a questo:
http: //localhost/folder1/page.faces
Che è quasi esattamente quello che volevi.
PrettyFaces ti consente di riscrivere il tuo URL. Se preferisci qualcosa di più leggero, estendi NavigationHandler e sostituisci handleNavigation, ad es. chiamando context.getExternalContext (). redirect ()
Sì. Abbiamo progettato PrettyFaces esattamente per gestire questa situazione:
PrettyFaces & # 8211; SEO, parametri dinamici, segnalibri e navigazione per JSF / JSF2
Puoi anche cambiare il nome della cartella da volti a jsp, ad esempio in questo modo:
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/jsp/*</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>jsp/index.jsp</welcome-file>
</welcome-file-list>
E quindi il tuo URL apparirà come:
http://localhost/WebApplication/jsp/folder1/page.jsp
e se distribuisci la tua applicazione nel percorso di contesto / del server delle applicazioni apparirà come:
http://localhost/jsp/folder1/page.jsp
ora sarà difficile scoprire che usi JSF per i lamer ;-) ma un hacker può investigarlo indicando il suo browser all'URL in questo modo http://localhost/folder1/page.jsp