Quelle est la différence entre un Servlet et Filter? Que recommandez-vous d'utiliser pour l'autorisation des pages?
Utilisez un Filter
lorsque vous souhaitez filtrer et/ou modifier les demandes en fonction de conditions spécifiques. Utilisez un Servlet
lorsque vous souhaitez contrôler, prétraiter et/ou post-traiter les demandes.
Le tutoriel Java EE mentionne ce qui suit à propos des filtres:
Un filtre est un objet qui peut transformer l'en-tête et le contenu (ou les deux) d'une demande ou d'une réponse. Les filtres diffèrent des composants Web dans la mesure où les filtres ne créent généralement pas eux-mêmes de réponse. Au lieu de cela, un filtre fournit des fonctionnalités qui peuvent être "attachées" à tout type de ressource Web. Par conséquent, un filtre ne doit pas avoir de dépendances sur une ressource Web pour laquelle il agit en tant que filtre; de cette façon, il peut être composé de plusieurs types de ressources Web.
Les tâches principales qu'un filtre peut effectuer sont les suivantes:
- Recherchez la demande et agissez en conséquence.
- Empêchez la paire demande-réponse de passer plus loin.
- Modifiez les en-têtes de demande et les données. Pour ce faire, vous fournissez une version personnalisée de la demande.
- Modifiez les en-têtes de réponse et les données. Pour ce faire, vous fournissez une version personnalisée de la réponse.
- Interagissez avec des ressources externes.
Pour l'autorisation, un Filter
est le mieux adapté. Voici un exemple de démarrage de base de la façon dont un filtre vérifie les demandes de l'utilisateur connecté:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
if (((HttpServletRequest) request).getSession().getAttribute("user") == null) {
// User is not logged in. Redirect to login page.
((HttpServletResponse) response).sendRedirect("login");
} else {
// User is logged in. Just continue with request.
chain.doFilter(request, response);
}
}
Les filtres conviennent le mieux à l'autorisation. En effet, ils peuvent être configurés pour s'exécuter sur toutes les pages d'un site. Vous n'avez donc besoin que d'un seul filtre pour protéger toutes vos pages.
En utilisant un filtre, nous pouvons améliorer les performances de la servlet - lorsque la demande arrive, nous pouvons effectuer un prétraitement sur demande, si la demande satisfait, nous pouvons transmettre à la servlet sinon donner un message au client fournir les informations appropriées dans la demande.