Je développe une application Web et j'utilise Spring framework. En fait, je n'ai jamais vraiment appris à utiliser Spring et je suis un peu perdu dans tout ça. Cependant, en utilisant les contrôleurs basés sur les annotations, j'ai été capable de créer la plupart de mon application!Intercepter des requêtes avant qu'elles ne parviennent au contrôleur dans une application web Spring basée sur des annotations
Maintenant, le problème est que je devrais être capable d'intercepter les requêtes avant qu'elles ne soient envoyées aux contrôleurs (j'en ai besoin pour que je puisse valider que l'utilisateur a accès à la page qu'il demande). Je viens de passer environ 5 heures à chercher des informations à ce sujet et j'ai en fait trouvé beaucoup, aucun d'entre eux n'a fonctionné comme prévu, je n'ai jamais été capable de rendre mon intercepteur afficher un simple "Hello World".
Voici ce que j'ai dans mon * -servlet.xml (j'ai aussi la définition d'autres haricots bien sûr):
<!-- this should be the class that contains the "hello world" -->
<bean id="myInterceptor" class="com.ibm.brmt.srb.admin.web.controller.TimeBasedAccessInterceptor"/>
<!-- this should "map" my interceptor no? -->
<bean id="handlerMapping" class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="interceptors">
<list>
<ref bean="myInterceptor"/>
</list>
</property>
</bean>
et voici ma classe TimeBasedAccessInterceptor (le nom n'est pas pertinent et probablement être changé)
package web.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
public class TimeBasedAccessInterceptor extends HandlerInterceptorAdapter{
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception {
System.out.println("-------------------------------------------------------------------------------------------");
}
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) throws Exception {
System.out.println("-------------------------------------------------------------------------------------------");
}
public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
System.out.println("-------------------------------------------------------------------------------------------");
return false;
}
}
les codes compiler et exécuter, mais ce qui est dans la classe TimeBasedAccessInterceptor est jamais appelé (i même des points d'arrêt utilisés). Est-ce que quelqu'un peut m'aider?
comme demandé, voici un "aperçu" de la façon dont j'implémente le contrôleur dans le * -servlet.xml
<bean id="controllerName" class="web.controller.controllerNameController">
<property name="property1" ref="beanRef" />
<property name="property1" ref="beanRef2"/>
</bean>
et dans le controllerNameController.java:
package web.controller;
@Controller
public class controllerNameController{
@RequestMapping
public void find(String[] enabledLvlCodes, String reset, String readRuleId, Filter filter, Errors errors,
Model model, HttpSession session) {
//Code goes here
}
}
Cela devrait fonctionner. Pouvez-vous mettre à jour votre réponse pour montrer votre classe de contrôleur, et comment vous le déclarez au printemps? – skaffman
Votre @RequestMapping ne spécifie pas de chemin URI. Êtes-vous sûr que la demande parvient à votre contrôleur? – skaffman
oui, j'en suis sûr. Spring est capable de "créer" automatiquement l'uri à partir du nom de la méthode. Si la demande n'atteignait pas le contrôleur, je ne pouvais pas voir la page de retour que je vois! – Gadgetsan