Problema con l'inoltro JSF e vincolo di sicurezza
Domanda
Sto facendo un'applicazione web in cui alcune pagine sono protette da login. Ho creato un regno JDBC di sicurezza in GlassFish per questo, e l'autenticazione modulo utilizzato (simile al metodo descritta qui )
sto usando Navigazione regole per reindirizzare l'utente alle aree protette del sito:
<navigation-case>
<from-outcome>showResults</from-outcome>
<to-view-id>/SecureUser/Reservation/New/AvailableResults.xhtml</to-view-id>
<redirect/>
</navigation-case>
(etc...)
Questo funziona bene. Ma se mi salta il tag di reindirizzamento nella navigazione caso, l'URL della pagina non cambia. E in quel caso, un utente non autenticato è in grado di accedere alla pagina protetta.
Qual è il modo migliore per andare su questo? Fare in modo che la pagina viene reindirizzato al posto di inoltrato è abbastanza buono? Dovrei scrivere codice in ogni pagina protetta che controlla se l'utente è loggato o no?
Soluzione
Utilizzando POST per la navigazione da pagina a pagina viene considerata una cattiva pratica. Non usare JSF h:commandLink
o h:commandButton
per una semplice navigazione da pagina a pagina. Entrambi genera una forma POST che è del tutto inutile e SEO-ostile per la navigazione semplice. Piuttosto utilizzare h:link
o h:button
invece. Rende un link di vaniglia GET plain e la forma GET rispettivamente.
Se si invia un modulo POST comunque e la pagina di risultato è diverso dalla pagina del modulo, quindi utilizzando PRG (post-Redirect-Get) modello è considerato buona pratica. È possibile utilizzare <redirect/>
per questo.