2012-03-28 8 views

Trả lời

64

Kể từ mùa xuân 3,2 họ nói thêm rằng tính năng với thẻ

mvc:exclude-mapping 

Xem ví dụ này từ tài liệu Xuân:

<mvc:interceptors> 
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" /> 
<mvc:interceptor> 
    <mvc:mapping path="/**"/> 
    <mvc:exclude-mapping path="/admin/**"/> 
    <bean class="org.springframework.web.servlet.theme.ThemeChangeInterceptor" /> 
</mvc:interceptor> 
<mvc:interceptor> 
    <mvc:mapping path="/secure/*"/> 
    <bean class="org.example.SecurityInterceptor" /> 
</mvc:interceptor> 

Đây là link đến doc

+0

Xin cảm ơn! Tôi sẽ thử nó! – momomo

+2

Đảm bảo xsd trỏ tới 3.2. Tôi đã dành mười phút cố gắng tìm ra những gì là sai. xsi: schemaLocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd \t \t http: //www.springframework. org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd \t \t http://www.springframework.org/schema/mvc http: //www.springframework. org/schema/mvc/spring-mvc-3.2.xsd "> – RuntimeException

2

Khi định cấu hình trình chặn, bạn có thể chỉ định mẫu đường dẫn. Trình chặn sẽ chỉ được gọi cho các bộ điều khiển mà đường dẫn khớp với mẫu đường dẫn của trình chặn.

ref: http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/mvc.html#mvc-config-interceptor

Nhưng khi bạn có thể nhận thấy điều đó, mô hình con đường không hỗ trợ loại trừ.

Vì vậy, tôi nghĩ cách duy nhất là mã một danh sách đen các đường dẫn bên trong trình chặn. Khi thiết bị chặn được gọi, truy xuất HttpServletRequest.getRequestURI() và kiểm tra xem đường dẫn có nằm trong danh sách đen hay không.

Bạn có thể tạo danh sách đen bên trong một phương thức được chú thích của trình chặn chặn, và vì vậy hãy lấy đường dẫn danh sách đen từ tệp thuộc tính chẳng hạn.

+0

Vâng, câu hỏi là những gì một cách thích hợp sẽ được xác định bộ điều khiển và hành động kể từ khi ánh xạ điều khiển về mặt lý thuyết có thể được xây dựng theo những cách khác nhau ... mùa xuân biết những gì bộ điều khiển là để bị sa thải sau khi interceptor, vì đối tượng handler là instance controller. Để làm điều này một cách đúng đắn sẽ phải tìm nó bằng cách sử dụng cùng một cơ chế mà mùa xuân để xác định hành động mục tiêu ... bất kỳ một? :) – momomo

+0

Cơ chế được Spring sử dụng để xác định bộ điều khiển phù hợp dựa vào chú thích '@ RequestMapping'. Vì vậy, để có cùng một điều cho interceptor có nghĩa là về cơ bản chú thích một interceptor với '@ RequestMapping'. Nhưng điều này là không thể hiện tại. – tbruyelle

14

Đối với cấu hình dựa trên java, từ docs

@Configuration 
@EnableWebMvc 
public class WebConfig extends WebMvcConfigurerAdapter { 

    @Override 
    public void addInterceptors(InterceptorRegistry registry) { 
     registry.addInterceptor(new LocaleInterceptor()); 
     registry.addInterceptor(new ThemeInterceptor()).addPathPatterns("/**").excludePathPatterns("/admin/**"); 
     registry.addInterceptor(new SecurityInterceptor()).addPathPatterns("/secure/*"); 
    } 

}