2013-05-23 46 views
8

Ngày tốt lành. Tôi có một ứng dụng mvc mùa xuân và 2 bộ điều khiển bên trong. Bộ điều khiển đầu tiên (PublicController) có thể xử lý yêu cầu từ tất cả người dùng, Thứ hai (PrivateController) chỉ có thể xử lý người dùng được ủy quyền.Bản đồ Spring HandlerInterceptor với chú thích

Vì vậy, tôi thực hiện hai Handler Interceptor`s

@Configuration 
@EnableWebMvc 
@ComponentScan(basePackages="webapp.base.package") 
public class WebApplicationConfig extends WebMvcConfigurerAdapter { 

    @Override 
    public void addInterceptors(InterceptorRegistry registry) { 
     registry.addInterceptor(new LoggerInterceptor()); 
     registry.addInterceptor(new AccessInterceptor()); 
    } 

} 

tôi cần tôi LoggerInterceptor để xử lý yêu cầu tất cả các bộ điều khiển, và AccessInterceptor tôi để xử lý chỉ PrivateController 's yêu cầu. Tôi phải bản đồ Interceptors đến Controllers với chú thích

Trả lời

20

Chỉ cần giải quyết.

@Configuration 
@EnableWebMvc 
@ComponentScan(basePackages="webapp.base.package") 
public class WebApplicationConfig extends WebMvcConfigurerAdapter { 

    @Override 
    public void addInterceptors(InterceptorRegistry registry) { 
     registry.addInterceptor(new LoggerInterceptor()).addPathPatterns("/**");; 
     registry.addInterceptor(new AccessInterceptor()).addPathPatterns("/private/**");; 
    } 

} 
+0

Nếu tôi sử dụng giải pháp này trong ứng dụng springboot của mình, nó sẽ phá vỡ mọi thứ. – LNT

+4

@LNT springboot sẽ bị hỏng do chú thích '@ EnableWebMvc'. Thao tác này sẽ tắt cấu hình mvc mặc định của Springboot. Chỉ cần xóa chú thích này và nó sẽ hoạt động. –

2

Tôi không biết tại sao, khi tôi sử dụng theo cách của bạn, nó hoạt động. Nhưng máy đánh chặn thực hiện hai lần. Và tôi tìm thấy một cách khác để làm điều này.

@Bean 
    public MappedInterceptor interceptor() { 
     return new MappedInterceptor(null, new String[]{"/","/**/*.js", "/**/*.html", "/**/*.css"}, new LogInterceptor()); 
    } 
Các vấn đề liên quan