Spring MVC Gestionnaire de l'Intercepteur ne fonctionne pas
J'ai interceptor suivant la classe :
package cz.coffeeexperts.feedback.server.web.interceptors;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
public class RestAuthorizationInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler)
throws Exception {
System.out.println("fuu");
response.setStatus( HttpServletResponse.SC_UNAUTHORIZED );
return false;
}
}
Je l'ai configuré à l'intérieur de mon spring-webmvc.xml comme suit :
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
<mvc:annotation-driven/>
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/rest/api/01/status" />
<bean class="cz.coffeeexperts.feedback.server.web.interceptors.RestAuthorizationInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
</beans>
Cependant quand je vais à http://localhost:8080/myserver/rest/api/01/status
, je reçois régulièrement des réponse avec le code d'état 200 (la même qu'avant, j'ai ajouté de l'intercepteur). Aussi, le message "fuu" n'est pas imprimé (donc le preHandle méthode n'est pas appelée).
Des idées? J'ai commencé à le faire avec cet exemple : http://javapapers.com/spring/spring-mvc-handler-interceptor/, mais tous les autres exemples de la même apparence, je ne peux pas trouver où je vais mal.
Je suis à l'aide de Printemps 3.2.4.RELEASE
Important de modifier, il fonctionne avec ceci :
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**" />
<bean class="cz.coffeeexperts.feedback.server.web.interceptors.RestAuthorizationInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
La question est donc, quel est le problème avec mon chemin?
Il ne se passe rien, pas d'erreurs, la méthode n'est pas appelée (comment je l'ai dit, pas de sortie pour le Système..println("fuu") s'affiche). Aussi, lorsque vous revenez faux sur preHandle, il doit intercepter la méthode du contrôleur...
L'intercepteur de travail lorsque vous retirez la cartographie?
SAXError apparaît :
Invalid content was found starting with element 'bean'. One of '{"http://www.springframework.org/schema/mvc":mapping}' is expected.
Essayez ceci: <mvc:les intercepteurs> <bean class="cz.coffeeexperts.la rétroaction.serveur.web.les intercepteurs.RestAuthorizationInterceptor" /> </mvc:les intercepteurs>
OriginalL'auteur libik | 2014-04-25
Vous devez vous connecter pour publier un commentaire.
Ok, j'ai trouvé la solution, parce que mon chemin est défini par le texte suivant :
Et c'est ainsi que mon contrôleur ressemble
La configuration de travail à cette adresse :
http://localhost:8080/myserver/rest/api/01/status
est comme suit :PS : Mes remerciements à geoand, il m'a poussé vers le droit chemin.
OriginalL'auteur libik
J'ai résolu ce problème en changeant la valeur de
mvc:mapping
. Ma configuration est:OriginalL'auteur Richard Xue
Offrant plus d'explication des raisons pour lesquelles cette méthode a fonctionné pour libik. Comme il l'a mentionné son contrôleur ressemble -
Et n'oubliez pas les intercepteurs sont à
HandlerMapping
niveau. Dans ce cas, il seraitRequestMappingHandlerMapping
(Printemps 3.1+ avecmvc:annotation-driven
) ouDefaultAnnotationHandlerMapping
. et de la cartographie ici serait pour/api/01/status
qui est précisément ce qu'il a fait.Si vous voulez qu'il soit appliqué pour tous les modèles, vous pouvez simplement faire
<mvc:mapping path="/**"/>
- ce qui va correspondre à toutes les Url (y compris les sous-chemins) ou vous pouvez simplement invoquer intercepteurs pour tous HandlerMappings -OriginalL'auteur Aniket Thakur