Avant la demande d'un filtre
J'ai besoin de avant ma demande (jsp, mais je ne pense pas que c'est de la matière), à partir d'une adresse http.Filtre
si l'URI de l'original de la demande de passer la validation de certains que mon filtre fonctionne.
J'ai trouvé ce page confrontés à une tâche similaire
Encore j'ai besoin de comprendre les éléments suivants:
- Comment puis-je obtenir ServletContext dans
doFilter()
méthode (dans l'ordre de renvoi d'appel de l'API)getServletContext()
n'est pas recignized - Dois-je
call chain.doFilter()
avant de le proposer, après le vers l'avant ou pas du tout?
De plus dois-je appelerchain.doFilter()
si ma validation passé ou que si elle échoue (car dans ce cas je ne vais pas continuer à avancer ma page)?
Cette question en fait continuer ce fil,
pour être plus évident, le code pourrait être quelque chose comme:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
if (request instanceof HttpServletRequest) {
HttpServletRequest httpServletRequest = ((HttpServletRequest)request);
String requestURI = httpServletRequest.getRequestURI();
String contextPath = httpServletRequest.getContextPath();
if (<this is my implementation of the validation of this filter>){
getServletContext().getRequestDispatcher(
"MySpecific.jsp").forward(request,response);
}
}
chain.doFilter(request,response);
}
OriginalL'auteur Spiderman | 2010-08-05
Vous devez vous connecter pour publier un commentaire.
Je dirais que si vous avez transmis la demande, vous ne devez pas appeler
chain.doFilter()
- la demande transmise vont être filtrés en fonction de sa propre configuration d'un filtre. Si votre échec de la validation du bien, ça dépend de la sémantique de votre application web sont - si la page d'origine est une sorte d'erreur générale/login/écran de bienvenue, vous voudrez peut-être continuer à, si la validation a échoué. Il est difficile de dire sans en savoir plus dans le contexte.OriginalL'auteur Péter Török
Pour obtenir le
ServletContext
, vous avez 2 options:Boutique à l'extérieur de la
FilterConfig
lors de l'initialisation et de l'appelFilterConfig.getServletContext()
appel
HttpServletRequest.getSession().getServletContext()
Je ne pense pas que vous avez nécessairement besoin de l'
ServletContext
pour obtenir leRequestDispatcher
que vous pouvez simplement appelerHttpServletRequest.getRequestDispatcher()
.Par rapport à
FilterChain.doFilter()
appel, si vous êtes à la redirection, je pense que vous ne voudriez pas faire l'appel, comme une fois que vous avant, je suppose que vous ne voulez pas n'importe quel type de comportement.Si vous n'avez pas en avant (vous ne tomberez pas dans votre si le bloc), puis je l'appellerais le
FilterChain.doFilter()
méthode, mais qui suppose qu'il existe une cible à l'autre extrémité à être invoqué.Boutique à l'extérieur de la FilterConfig lors de l'initialisation et de l'appel FilterConfig.getServletContext() C'est ma méthode préférée, comme n'ont pas de session de manière explicite:
OriginalL'auteur jridley