2012-01-19 18 views
6

ví dụ:Làm cách nào để tôi có thể chạy mã phổ biến cho hầu hết các yêu cầu trong Ứng dụng web Spring MVC của mình?

tôi có các URL khác nhau ánh xạ sử dụng Spring MVC RequestMapping

@RequestMapping(value = "/mystuff", method = RequestMethod.GET) 
@RequestMapping(value = "/mystuff/dsf", method = RequestMethod.GET) 
@RequestMapping(value = "/mystuff/eee", method = RequestMethod.GET) 

vv

Tôi muốn chạy một số hành động chung trước khoảng 90% yêu cầu của tôi. Đây là một số bộ điều khiển.

Có cách nào để thực hiện điều đó mà không cần đào sâu vào AOP không? Và nếu tôi phải sử dụng các khía cạnh, bất kỳ hướng dẫn nào về cách thực hiện điều này ?!

Cảm ơn!

Thông tin thêm:

Đó là để chạy một số bảo mật cụ thể ứng dụng - chúng ta đang bị xích vào một an ninh mẹ thiết lập, mà chúng tôi cần phải đọc và gọi vào, và sau đó cần phải truy cập vào một cookie trước khi một số nhất của chúng ta gọi, nhưng không phải tất cả.

+0

Ra khỏi tò mò, nó là những gì mà bạn muốn làm trước khi tất cả các yêu cầu? Tùy thuộc vào những gì nó có, có khả năng _already_ một nơi tốt trong ngăn xếp để đặt nó. Ngoài ra, bạn có đang sử dụng Spring Security không? Điều đó cũng có nhiều móc tốt. – cdeszaq

+0

cảm ơn, tôi đã cập nhật câu hỏi của tôi :) – laura

Trả lời

6
+0

Cảm ơn, trông rất hữu ích. Làm cách nào để loại trừ một số URL nhất định khỏi thiết bị chặn? Chúng tôi đang sử dụng cấu hình chú thích. (Các tài liệu có liên kết bị hỏng đề cập đến các không gian tên) – laura

+0

Vâng, như ví dụ ở đây: http://www.vaannila.com/spring/spring-interceptor.html hiển thị, bạn có một phương thức bên trong trình chặn cho phép bạn kiểm tra HttpRequest đối tượng và quyết định nếu nó là một yêu cầu uri bạn muốn đánh chặn –

+0

Điều này có nghĩa là chúng ta sẽ phải liệt kê ra loại trừ của chúng tôi trong phương pháp này? Tôi cho rằng lý tưởng là chúng tôi muốn có thể chỉ định URL nào sẽ chặn bằng cách sử dụng chú thích trong bộ điều khiển. – laura

1

Phương pháp HandlerInterceptor.preHandle() cung cấp cho bạn truy cập vào các yêu cầu và phản ứng và cũng xử lý mục tiêu. Trong Spring 3.1 sẽ có kiểu HandlerMethod, cho phép bạn truy cập vào lớp và phương thức của trình điều khiển đích. Nếu nó giúp bạn có thể thử loại trừ toàn bộ các lớp điều khiển theo tên loại, sẽ được gõ mạnh mẽ và không chỉ rõ các URL rõ ràng.

Một tùy chọn khác sẽ được tạo một trình chặn được ánh xạ tới một tập hợp các mẫu URL. Xem phần về cấu hình Spring MVC trong tài liệu tham khảo.

3

Trình chặn là giải pháp. Nó có các phương thức preHandler và postHandler, nó sẽ được gọi trước và sau mỗi yêu cầu tương ứng. Bạn có thể móc vào từng đối tượng HTTPServletRequest và cũng bằng cách truyền vài đối tượng bằng cách đào nó.

đây là một số mẫu mã:

@Component 
public class AuthCodeInterceptor extends HandlerInterceptorAdapter { 

    @Override 
    public boolean preHandle(HttpServletRequest request, 
      HttpServletResponse response, Object handler) throws Exception { 

     // set few parameters to handle ajax request from different host 
     response.addHeader("Access-Control-Allow-Origin", "*"); 
     response.addHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS"); 
     response.addHeader("Access-Control-Max-Age", "1000"); 
     response.addHeader("Access-Control-Allow-Headers", "Content-Type"); 
     response.addHeader("Cache-Control", "private"); 

     String reqUri = request.getRequestURI(); 
     String serviceName = reqUri.substring(reqUri.lastIndexOf("/") + 1, 
       reqUri.length()); 
       if (serviceName.equals("SOMETHING")) { 

       } 
     return super.preHandle(request, response, handler); 
    } 

    @Override 
    public void postHandle(HttpServletRequest request, 
      HttpServletResponse response, Object handler, 
      ModelAndView modelAndView) throws Exception { 

     super.postHandle(request, response, handler, modelAndView); 
    } 
} 
Các vấn đề liên quan