Следвах документацията за HandlerInterceptors. Отбелязвайки, че в новата версия на Spring: "конфигурираният прехващач ще се прилага за всички заявки, обработени с анотирани контролни методи".
Следното е в xml конфигурационен файл:
Имам започване на анотиран контролер по следния начин:
Когато искам URL, който изпълнява кода на контролера, кодът ми за прихващания не се нарича. Може ли някой да обясни защо?
Кодът за прихващания е:
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
public class DomainNameInterceptor extends HandlerInterceptorAdapter {
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler)
throws Exception {
System.out.println("Why is this not called?");
return true;
}
}
Използвах следната документация: Пролетна ядро 3.1.x Документация
Направих търсене на HandlerInterceptor и следвах примера, даден в документацията в включената връзка.
Отговори:
9 за отговор № 1Ако сте конфигурирали вашия MVC контекст, използвайки <mvc:annotation-driven/>
, тогава мисля, че handlerMapping е създал когадефинирането на beans на базата на това персонализирано пространство от имена пренебрегва определеното от handlerMapping. По-добър начин да регистрирате прехващачите си е да използвате <mvc:interceptors>
subtag за дефиниране на прехващачи, по този начин ще се регистрира в правилния манипулатор на манипулатора:
<mvc:annotation-driven>
<mvc:interceptors>
<ref bean="interceptor"/>
</mvc:interceptors>
</mvc:annotation-driven>
8 за отговор № 2
Отговорът на Biju по-горе е правилен, освен през пролетта на 3.1.
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/pathToIntercept/**" />
<bean class="com.foo.bar.Interceptor" />
</mvc:interceptor>
</mvc:interceptors>