Вопрос по spring, java – Spring 3.1 HandlerInterceptor Не вызывается

7

Я следовал документации для HandlerInterceptors. Отмечая, что в новой версии Spring: «настроенный перехватчик будет применяться ко всем запросам, обработанным с помощью аннотированных методов контроллера».

Следующее находится в файле конфигурации xml: enter image description here

У меня есть аннотированный контроллер, начинающийся так:

enter image description here

Когда я запрашиваю 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;
  }
}

Я использовал следующую документацию: Spring Core 3.1.x Документация

Я выполнил поиск по HandlerInterceptor и последовал примеру, приведенному в документации по включенной ссылке.

Вы также можете связать документацию, которую вы читали. Nathaniel Ford
Не могли бы вы показать код перехватчика? И пожалуйста - без скриншотов :) daniel
Можете ли вы проверить список зарегистрированных bean-компонентов, чтобы убедиться, что FrameworkNameInterceptor действительно создается фреймворком? Nathaniel Ford
Хорошая идея, я также включил ссылку на документацию. Dean Peterson
Я включил код перехватчика выше. Есть идеи? Dean Peterson

Ваш Ответ

2   ответа
9

Если вы настроили свой контекст MVC, используя<mvc:annotation-driven/>Затем я думаю, что handlerMapping, созданный при определении bean-компонентов на основе этого пользовательского пространства имен, переопределяет определенное вами handlerMapping. Лучший способ зарегистрировать ваши перехватчики - использовать<mvc:interceptors> subtag для определения перехватчиков, таким образом он будет зарегистрирован в правильном handlerMapping:

<mvc:annotation-driven>
    <mvc:interceptors>
        <ref bean="interceptor"/>
    </mvc:interceptors>
</mvc:annotation-driven>
Error: User Rate Limit Exceeded@Configuration @EnableWebMvc public class WebMvcConfig extends WebMvcConfigurerAdapter { @Inject private ConnectionRepository connectionRepository; @Override public void addInterceptors(InterceptorRegistry registry){ // Equivalent to <mvc:interceptors> registry.addInterceptor(new DomainNameInterceptor()); } Dean Peterson
Error: User Rate Limit Exceeded
8

Ответ Biju выше верен, за исключением того, что весной 3.1 вы должны сделать это:

<mvc:interceptors>
   <mvc:interceptor>
     <mvc:mapping path="/pathToIntercept/**" />
     <bean class="com.foo.bar.Interceptor" />
   </mvc:interceptor>
</mvc:interceptors>

Похожие вопросы