2017-01-22 4 views
0

Я знаю, что это задавали много раз, но никто из них не мог заставить мой код работать. Я мог бы что-то делать неправильно, но я не могу понять, что.Весенние перехваты не работают

Я использую Spring Boot с AngularJS, то, что я пытаюсь сделать, это предварительно перенести все запросы.

Это мой код:

Контроллер:

@RestController 
@RequestMapping(value = { "/user" }) 
public class UserController { 

    @RequestMapping(value = "/get", method = RequestMethod.GET) 
    public String getLanguage() { 
     return "user"; 
    } 
} 

Interceptor:

@Component 
public class RequestHandler extends HandlerInterceptorAdapter { 

    @Override 
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException { 
     System.out.println("intercepted"); 
     return false; 
    } 
} 

WebConfig:

@Configuration 
public class WebConfig extends WebMvcConfigurerAdapter { 

    @Autowired 
    HandlerInterceptor requestHandler; 

    @Override 
    public void addInterceptors(InterceptorRegistry registry) { 
    registry.addInterceptor(requestHandler); 
    } 
} 

И я добавил это к applicationContext.xml:

<mvc:interceptors> 
    <bean class="server.RequestHandler" /> 
</mvc:interceptors> 

Я все выходные, пытаясь сделать эту работу, и я не мог, любая помощь будет действительно оценена!

Спасибо!

+0

Вы пытались ввести RequestHandler, а не обычный HandlerInterceptor. Или зарегистрируйте свой перехватчик с помощью registry.addInterceptor (new RequestHandler())? – Nathanael

+0

Я пробовал это, но он все еще не работает. – Motomine

+0

Почему у вас есть как xml, так и java-конфиг для настройки Spring MVC ... Это проблема, ожидающая случиться ... Также без «@ EnableWebMvc» или '' эти конфиги не являются в значительной степени, то же самое, если вы вручную настроили «HandlerAdapter» и/или «HandlerMapping». –

ответ

0

Вы можете попробовать определения Bean вручную без объявления Ваш Interceptor как @Component так:

RequestHandler.java

public class RequestHandler extends HandlerInterceptorAdapter { 

    @Override 
    public boolean preHandle(final HttpServletRequest request, final HttpServletResponse response, final Object handler) throws ServletException { 
     System.out.println("intercepted"); 
     return true; 
    } 
} 

WebConfig.java

@Configuration 
public class WebConfig extends WebMvcConfigurerAdapter { 

    @Bean 
    public RequestHandler requestHandler() { 
     return new RequestHandler(); 
    } 

    @Override 
    public void addInterceptors(final InterceptorRegistry registry) { 
     registry.addInterceptor(requestHandler()); 
    } 
} 

И к слову: если класс объявлен перехватчиком, то почему нет переименования его в нечто, содержащее термин Перехватчик в нем, такой как RequestInterceptor?

Должно работать прямо. Пожалуйста, дайте мне знать, если это трюк для вас!

Обновление: Я реализовал это в прототипе. См. Этот минимальный, полный и проверяемый пример. Надеюсь, поможет! https://github.com/dbubenheim/stackoverflow-41794738.git

+0

Я пробовал это, но говорит, что он может создать фасоль. Я не знаю, что еще я могу сделать, потому что я много пробовал. Могу ли я установить что-то в файле web.xml? Поскольку мой пуст, я попытался установить отображение сервлета, но он говорит, что он может быть объявлен или что-то в этом роде. – Motomine

+0

Я обновил свой ответ и добавил минимальный пример. Возможно, у вас есть время, чтобы проверить, как это работает для вас. –

+0

Также я должен упомянуть, что возвращаемое значение метода preHandle должно быть «истинным», чтобы завершить цепочку обработчика запроса и получить доступ к вашему методу контроллера. Пожалуйста, взгляните на это также @Motomine –

 Смежные вопросы

  • Нет связанных вопросов^_^