Spring 拦截不起作用

Mot*_*ine 5 java spring interceptor angularjs

我知道这个问题已经被问过很多次了,但是没有一个能让我的代码工作。我可能做错了什么,但我不知道是什么。

我正在将 Spring Boot 与 AngularJS 结合使用,我想做的是预先处理所有请求。

这是我的代码:

控制器:

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

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

拦截器:

@Component
public class RequestHandler extends HandlerInterceptorAdapter {

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

网络配置:

@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {

  @Autowired
  HandlerInterceptor requestHandler;

  @Override
  public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(requestHandler);
  }
}
Run Code Online (Sandbox Code Playgroud)

我将其添加到 applicationContext.xml 中:

<mvc:interceptors>
    <bean class="server.RequestHandler" />
</mvc:interceptors>
Run Code Online (Sandbox Code Playgroud)

我整个周末都在努力让这项工作成功,但我做不到,任何帮助将非常感激!

谢谢你!

Dan*_*eim 2

您可以尝试手动定义Bean而不将其声明Interceptor@Component如下所示:

请求处理程序.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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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());
    } 
}
Run Code Online (Sandbox Code Playgroud)

顺便说一句:如果该类被声明为拦截器,为什么不将其重命名为包含术语Interceptor的名称,例如RequestInterceptor

它应该工作简单。请告诉我这是否对您有用!

更新:我已经在原型中实现了这一点。请参阅这个最小、完整且可验证的示例。希望能帮助到你! https://github.com/dbubenheim/stackoverflow-41794738.git