6

I have a bunch of controllers like:

@RestController
public class AreaController {
    @RequestMapping(value = "/area", method = RequestMethod.GET)
    public @ResponseBody ResponseEntity<Area> get(@RequestParam(value = "id", required = true) Serializable id) { ... }
}

and I need to intercept all the requests that reach them,

I created an interceptor like this example:

http://www.mkyong.com/spring-mvc/spring-mvc-handler-interceptors-example/

but it never enters :(

because I'm using only annotations, i don't have a XML to define the interceptor, what I've found its to set it like this:

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.test.app")
public class AppConfig extends WebMvcConfigurerAdapter {

    @Bean
    public ControllerInterceptor getControllerInterceptor() {
        ControllerInterceptor c = new ControllerInterceptor();
        return c;
    }

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

}

what am i doing wrong or am i missing something?

Alfredo M
  • 568
  • 3
  • 7
  • 26

3 Answers3

3

your Interceptor class ControllerInterceptor isn't an application context managed bean. Make sure you put @Component annotation on ControllerInterceptor and add it's package to @ComponentScan. So, let's say your ControllerInterceptor resides in package com.xyz.interceptors like:

package com.xyz.interceptors;  //this is your package

@Component //put this annotation here
public class ControllerInterceptor extends HandlerInterceptorAdapter{
 // code here
}

and your AppConfig becomes:

@ComponentScan(basePackages = { "com.test.app", "com.xyz.interceptors" })
public class AppConfig extends WebMvcConfigurerAdapter {
// ...
}
Black
  • 5,023
  • 6
  • 63
  • 92
Arjit
  • 421
  • 7
  • 20
2

so apparently i was doing something wrong but can't say what,

defining the interceptor like:

<mvc:interceptors>
  <bean class="com.test.ControllerInterceptor" />
</mvc:interceptors> 

I'm pretty sure that you can also define it in pure java, but this is working,

answer found in: http://viralpatel.net/blogs/spring-mvc-interceptor-example/

Alfredo M
  • 568
  • 3
  • 7
  • 26
1

Possible you are missing mapping

registry.addInterceptor(getControllerInterceptor()).addPathPatterns("/**");

And as I know you don't have to use

super.addInterceptors(registry);
PawelN
  • 848
  • 7
  • 17