2016-02-05 63 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不是同步方法。

相关问题