2016-02-05 66 views
1

我在學習struts,並且創建了一個dispatchAction,它檢查用戶的權限,然後轉發到正確的頁面。 這是代碼:此代碼是否會導致競爭狀態?

public class UserCheck extends DispatchAction { 

    private static String role = ""; 

    public class UserAction extends DispatchAction { 


     public ActionForward checPrivileges(ActionMapping mapping, ActionForm form, 
       HttpServletRequest request, HttpServletResponse response) 
       throws IOException, ServletException { 
      boolean isAdmin; 
      //check if admin and put outputin in isAdmin 
      //check if user is admin 
      if (isAdmin) { 
       role = "admin"; 
      } else { 
       role = "user"; 
      } 
       //forwared based on role 
     } 
    } 

可以將此代碼導致的競爭條件,因爲屬性的作用是靜態和UserCheck所有實例之間共享?

+6

是的,它絕對會導致與您描述的完全相同的競爭狀態。 – yole

+1

同意。這將導致競爭狀況。如果您需要訪問角色某處的角色,請考慮將其存儲在會話或請求屬性中。我也相信struts/struts2可以將角色作爲參數傳遞給您要轉發的動作。 – Michal

+2

*學習struts *? S1是EOL。從Struts2開始。 –

回答

1

是的,它會導致競爭條件,如果:
1.您有多個UserAction實例。
2.當您只有一個UserAction實例時,但checPrivileges不是同步方法。

相關問題