2009-06-15 24 views
6

Có cách cấu hình trong Struts 1.x do đó các lớp hành động của tôi chỉ được thực hiện trên HTTP 'POST' mà thôi.Giới hạn các yêu cầu HTTP thành 'POST' chỉ trong Struts 1.x

Tôi hiểu rằng tôi có thể sử dụng request.getMethod() trong lớp hành động của mình và sau đó thực hiện 'nội dung' nhất định dựa trên đó.

Kính trọng, Jonathan

+0

Bạn muốn điều gì xảy ra nếu ai đó gửi GET? – skaffman

+0

Nó chỉ là một ứng dụng thu thập dữ liệu đơn giản và nếu nó được GET, chúng tôi sẽ không lưu dữ liệu vào DB. Tôi chỉ muốn kiểm tra nếu có xml 'cấu hình' cách làm khác hơn là programatically. – Jonathan

+0

Cuối cùng, bạn đã thực hiện điều này như thế nào? – xain

Trả lời

3

Dưới đây là ý tưởng và đó là cả một số giải pháp theo chương trình và cấu hình. Bạn có thể tạo ActionMapping tùy chỉnh ...

public class YourPOSTRequiredActionMapping extends ActionMapping { } 

... và sử dụng trong cấu hình thanh chống cho ánh xạ chỉ POST.

<action path="/your/path" type="YourAction" className="YourPOSTRequiredActionMapping" /> 

Sau đó, bạn có thể kéo dài tuổi thanh chống RequestProcessor và ghi đè processMapping

public class YourRequestProcessor extends RequestProcessor { 
    protected ActionMapping processMapping(HttpServletRequest request, HttpServletResponse response, String path) throws IOException { 
     ActionMapping mapping = super.processMapping(request, response, path); 
     if (mapping instanceof YourPOSTRequiredActionMapping) { 
      if (!request.getMethod().equals("POST")) { 
       mapping = null; 
      } 
     } 
     return mapping; 
    } 
} 

Hãy chắc chắn để cấu hình thanh chống cấu hình để sử dụng YourRequestProcessor.

<controller processorClass="YourRequestProcessor" nocache="true" contentType="text/html; charset=UTF-8" locale="false" /> 

Tôi dựa trên mã số làm việc cũ này nhưng tôi chưa biên dịch mã mẫu ở trên.

2

Một cách để thực hiện việc này mà không thay đổi ứng dụng của bạn là viết một servlet Bộ lọc loại bỏ các yêu cầu không phải POST. Sau đó bạn có thể cắm bộ lọc này vào tệp web.xml của bạn và định cấu hình các mẫu url của nó để phù hợp với đường dẫn của trình điều khiển Struts của bạn.

5

Bạn có thể sử dụng web.xml để xác định quyền truy cập. Ràng buộc này ngăn các yêu cầu GET:

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>struts action servlet</web-resource-name> 
     <url-pattern>*.do</url-pattern> 
     <http-method>GET</http-method> 
    </web-resource-collection> 
    <auth-constraint> 
     <!-- no one! --> 
    </auth-constraint> 
    </security-constraint> 
+0

Làm thế nào để bạn tùy chỉnh những gì sẽ xảy ra nếu ứng dụng nhận được yêu cầu GET trong trường hợp này? – xain

+0

@xain - điều đó sẽ được hỏi tốt hơn là một câu hỏi mới giải thích những gì bạn muốn làm. – McDowell

0

Câu trả lời McDowell là không thể chấp nhận trừ khi bạn có một số yêu cầu cụ thể. Bạn sẽ nhận được một lỗi HTTP 503 mà bạn có thể nắm bắt để hiển thị thông tin có ý nghĩa cho người dùng hoặc chỉ để lại nó để quản lý lỗi thực tế từ cấu hình web hiện tại của bạn.

Các vấn đề liên quan