2013-06-05 27 views
5

Tôi đã sử dụng khung công tác Struts 2 và tôi đã tạo một ứng dụng web có Trang Đăng nhập. Tôi có ba lớp khác nhau Action có tên là Action1, Action2, Action3 và các chế độ xem khác nhau cho các trang JSP được hiển thị bằng cách chạy một số logic nghiệp vụ trong các lớp học Action.struts2 thêm các trình chặn trong struts.xml cho tất cả các lớp hành động

Bây giờ, tôi muốn kiểm tra xem một người dùng đã đăng nhập trước khi lớp học Action tiến hành xử lý. Vì vậy, tôi tạo ra một kẻ đánh chặn dưới đây hoạt động tốt.

public String intercept(ActionInvocation invocation) throws Exception 
{ 
    HttpServletRequest request = ServletActionContext.getRequest(); 
    HttpServletResponse response = ServletActionContext.getResponse(); 
    HttpSession   session = request.getSession(); 

    if(session.isNew()) 
    { 
     response.sendRedirect("Login.action"); 
    } 

    System.out.println("Interceptor Fired"); 
    String result = invocation.invoke(); 
    return result; 
} 

Những gì tôi muốn ở struts.xml là thay vì thêm một đánh chặn cho tất cả các hành động như hình dưới đây

<interceptor-ref name="newStack"/> 

tập tin struts.xml tôi có

<package name="default" extends="struts-default">  
    <interceptors> 
    <interceptor name="printMsgInterceptor" class="LoginInterceptor"></interceptor> 
     <interceptor-stack name="newStack"> 
     <interceptor-ref name="printMsgInterceptor"/> 
     <interceptor-ref name="defaultStack" /> 
     </interceptor-stack> 
    </interceptors> 

    <action name="actone" class="Action1"> 
     <result name="success">/success.jsp</result> 
     <interceptor-ref name="newStack"/> 
    </action> 
     <action name="acttwo" class="Action2"> 
     <result name="success">/success.jsp</result> 
     <interceptor-ref name="newStack"/> 
    </action> 
     <action name="actthree" class="Action3"> 
     <result name="success">/success.jsp</result> 
     <interceptor-ref name="newStack"/> 
    </action> 
    </package> 

Đối với mỗi hành động tôi muốn có một số định nghĩa được viết trong struts.xml chạy trình chặn chặn thay vì tự thêm

<interceptor-ref name="newStack"/> 

Trả lời

12
<interceptor name="test" class="Full path for LoginInterceptor" /> 

    <interceptor-stack name="testStack"> 
     <interceptor-ref name="test"/> 
     <interceptor-ref name="defaultStack"/> //here you are including default stack 
    </interceptor-stack> 

</interceptors> 
<default-interceptor-ref name="testStack"></default-interceptor-ref> 

Bây giờ testStack sẽ thực hiện cho mọi yêu cầu

+0

Cảm ơn bạn đã trả lời Nó hoạt động gr8 Tôi không muốn máy đánh chặn này chỉ có một trang là Trang đăng nhập vì nó là kết quả của vòng lặp chuyển hướng. Có cách nào để tránh kẻ đánh chặn cho một lớp hành động cụ thể –

+1

\t \t \t \t \t \t .... \t \t PSR

+0

Hoặc bạn có thể xác định đánh chặn ngăn xếp cho một gói cụ thể và mỗi gói mở rộng nó sẽ sử dụng ngăn xếp mặc định của nó.Các hành động khác không nên bị chặn (chẳng hạn như Đăng nhập) có thể được định nghĩa trong các gói khác không mở rộng gói mà bạn đã xác định ngăn xếp mặc định chặn –

5

Sử dụng

<default-interceptor-ref name="newStack"/> 

Nếu bạn không đặt interceptor-ref bằng tay cho mỗi hành động mà bạn có thể sử dụng default-interceptor-ref để đánh chặn mọi hành động mà không có một cách rõ ràng xác định cấu hình máy đánh chặn. Xem How do we configure an Interceptor to be used with every Action.

Chúng ta có thể tạo ngăn xếp tên riêng của chúng tôi và thậm chí tuyên bố một đánh chặn mặc định ngăn xếp mới cho một gói

<package name="default" extends="struts-default" > 
    <interceptors> 
     <interceptor-stack name="myStack"> 
      <interceptor-ref name="timer"/> 
      <interceptor-ref name="logger"/> 
     <interceptor-ref name="defaultStack"/> 
     </interceptor-stack> 
    </interceptors> 

Tuy nhiên, nếu bạn nói rằng đánh chặn trên hoạt động tốt tôi sẽ khuyến khích bạn được thận trọng về một logic nghiệp vụ mà hành động đăng nhập sẽ không được thực thi nếu nó không thành công trong lần thực hiện đầu tiên. Thay vì kiểm tra phiên mới, bạn nên kiểm tra kết quả của người dùng đã được xác thực và lưu các kết quả này trong phiên mà bạn có thể kiểm tra trong trình chặn. Xem câu hỏi này cho example.

Ví dụ về cách viết trình chặn chặn sử dụng thông tin người dùng được xác thực với phiên bạn có thể tìm thấy here.

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