MVC Java Config - HandlerInterceptor ne pas exclure les chemins
J'ai un MVC en Java configuration, mais le HandlerInterceptor
n'est pas l'exclusion de certains modèles.
À la ligne marquée xxxsi
1) j'ai ajouté les deux addPatterns("/**")
et excludePathPatterns("*.ecxld")
à la HandlerInterceptor
's InterceptorRegistration
le HandlerInterceptor.preHanlde()
n'est PAS appelée à tous. e.g .addPathPatterns("/**").excludePathPatterns("*.ecxld")
2) j'ajoute seulement excludePathPatterns("*.ecxld")
à la HandlerInterceptor
's InterceptorRegistration
le HandlerInterceptor.preHanlde()
est toujours exécuté.
(les autres intercepteurs sont invoqués fine).
Tous les pointeurs apprécié.
Grâce
@Configuration
public class MyMVCConfigurerAdapter extends WebMvcConfigurerAdapter {
@Override
public void addInterceptors(final InterceptorRegistry registry) {
registry.addInterceptor(getInterceptorOne());
registry.addInterceptor(getMyHandlerInterceptor())
.excludePathPatterns("*.ecxld"); //**xxx**
registry.addInterceptor(getInterceptorTwo()
);
}
source d'informationauteur solarwind
Vous devez vous connecter pour publier un commentaire.
Les modèles que vous spécifiez pour inclure et exclure sont ant bases des expressions de chemin et pas normal URL expressions que vous exprimons en web.xml pour mapper un servlet ou un filtre par exemple.
De faire un excluent le travail, vous devez également inclure un chemin d'inclusion (comme vous l'avez déjà remarqué avec votre deuxième remarque). Prochain changement de vos exclure modèle à
/**/*.ecxld
.Votre expression
*.ecxld
correspondent àfile.ecxld
mais ne correspondra pas à/file.ecxld
ou même/foo/file.ecxld
. Le/**/
partie prend soin de cela. Cependant pour le faire fonctionner, il nécessite également uneincludePathExpression
(le code vérifie si il y a unincludePathExpression
lorsqu'il n'est pas qu'il est ignorant laexcludePathExpression
).Donc en bref changer votre configuration, à la suite de devrait résoudre votre problème.
Je sais que c'était il y a longtemps mais je viens de tombé sur le même problème. Au cours de ma recherche j'ai trouvé le suivant blog. Là, il est mentionné que si les intercepteurs sont configurés comme les haricots, il sera automatiquement ajouté à la chaîne.
Je suis maintenant en utilisant le Printemps 4.1.x alors il pourrait y avoir une différence, mais ce que résolu pour moi a été la suivante:
J'ai changé ma définition comme suit:
de registre.addInterceptor(getMyHandlerInterceptor())
.addPathPatterns("/**")
.excludePathPatterns("/user/login");
En mettant le addPathPatterns avant la excludePathPatterns le comportement de l'intercepteur soudain a bien fonctionné.
Après le débogage, les intercepteurs ne sont pas exécutées dans l'ordre où ils ont été ajoutés. Dans l'exemple ci-dessus, interceptorOne, puis interceptorTwo, puis le gestionnaire (avec les exclus modèle) a été exécuté.
Je rencontre ce problème, ne peut pas exclure le chemin.
Après je debug, a trouvé est parce que le Printemps de sécurité rediriger vers "/login", en raison de "/login" est inclus dans "/**", pourquoi ne pas l'accès.
Solution est d'ajouter le login & lien de déconnexion que d'exclure les chemins de trop!
J'ai été confronté à un problème similaire, tout en travaillant avec SpringBoot.
Comment j'ai résolu ce problème?
J'ai fait une méthode pour renvoyer une nouvelle instance de l'Intercepteur. Et vous aurez à écrire le excludePathPatters après la addPathPattern méthode de la base de registre.
Voici l'extrait de code:
J'espère que cette aide.