Supposons que vous souhaitiez créer un écran qui récupère certaines conditions de la base de données et redirige vers l'écran spécifié si les conditions sont remplies.
Dans un tel cas, si vous utilisez Spring-security, vous pouvez utiliser un filtre personnalisé. Vous pouvez définir un filtre et exécuter la redirection dans cette classe.
Le moment d'insertion d'un filtre avec Spring-security est indiqué ci-dessous.
Les filtres personnalisés peuvent être définis avant ou après ce qui précède, ou comme alternative au filtre lui-même.
spring-security.xml
<http>
<!--Avant-->
<custom-filter before="FORM_LOGIN_FILTER" ref="myFilter" />
<!--Comme alternative à lui-même-->
<custom-filter position="FORM_LOGIN_FILTER" ref="myFilter" />
<!--arrière-->
<custom-filter after="FORM_LOGIN_FILTER" ref="myFilter" />
</http>
Il semble préférable d'utiliser GenericFilterBean
pour les filtres Spring. Définissez une classe qui hérite de cette classe à un endroit approprié dans le projet.
Ensuite, définissez l'espace de noms de la classe et l'id sur Spring en XML. Ce faisant, il est destiné à être utilisé dans la sécurité du ressort.
spring-context.xml
<beans:bean id="myFilter" class="org.baeldung.security.filter.CustomFilter"/>
Lorsque j'écris un filtre qui affecte l'ensemble du projet comme celui-ci, j'obtiens la double erreur Dispatch que j'avais l'habitude de voir dans Struts. Cette:
java.lang.IllegalStateException: Cannot forward after response has been committed
L'essentiel est que cela se produit lorsque vous essayez à nouveau de filtrer et de rediriger les demandes qui ont une destination fixe.
Pour contourner ce problème, reportez-vous au Tableau 6.1. Alias de filtre standard et ordre ci-dessus. Effectuez le filtrage souhaité avant de décider de la destination de la demande.
Recommended Posts