zoukankan      html  css  js  c++  java
  • struts2的权限控制思路

    这两天接触的一个项目的权限控制思路,控制页面权限、action权限、页面内容权限

    1用户

    2角色

    3权限组

    4权限

    5菜单

    权限控制的5个基本模块: 

    • 用户: 用户与角色关联
    • 角色: 角色与权限关联
      •   给角色赋予权限:将所有权限列出:

             

    • 权限组:用于归类权限
    • 权限:
      • 权限可以是一个菜单(当权限的url和菜单的url相同时即为菜单权限)
        • 获取菜单列表时根据权限过滤菜单:
        •   if (menuUrl.equals(auth.getUrl()) || (user!=null && user.getId().equals(1L))) { //或者为超级用户的话也显示
          			menuJson.setIsHidden(false);// 有权限,显示
      • 也可以为页面内容权限(当权限的url为”#***“的标识为功能权限,使用自”定义标签控制“页面内容权限的显示隐藏)
        •   JSP页面:
          1 <auth:showhtml url="#hpgg">
          2         <%--自定义标签..需要根据权限显示隐藏的内容--%>
          3 </auth:showhtml>
      • 也可以是action权限(将每一个action都加到权限中,使用struts的拦截器判断action是否有url权限)
        •   配置拦截器:
        • <package name="my-default" extends="json-default">
          <interceptor name="loginInterceptor" class="***.*.**.LoginInterceptor" />
          <interceptor name="authInterceptor" class="***.*.**.AuthInterceptor" />    
          
          <interceptors>
          <interceptor-stack name="loginStack">
          <interceptor-ref name="authInterceptor" >
          <param name="excludeMethods">login,loginout</param>
          </interceptor-ref>
          </interceptor-stack>
          </interceptors>
          
                  <default-interceptor-ref name="loginStack"></default-interceptor-ref>
          </package>


          <package name="*" extends="my-default">
          <action name="*" class="*" >

          ****

          </action>
          </package>

           
        • 拦截器代码:

        •  1 @SuppressWarnings("serial")
           2 public class AuthInterceptor extends MethodFilterInterceptor {
           3 
           4     @SuppressWarnings("unchecked")
           5     @Override
           6     protected String doIntercept(ActionInvocation invocation) throws Exception {
           7         String url = invocation.getProxy().getActionName().trim() + "!"
           8                 + invocation.getProxy().getMethod().trim();
           9 
          10         Map map = invocation.getInvocationContext().getSession();
          11 
          12         User_info user = (User_info) map.get("user");
          13 
          14         boolean i = false;
          15         Set<Role> roles = user.getRoles();
          16         if (roles == null || roles.size() == 0) { // 无角色不能访问
          17 
          18             return "noAuth";
          19         }
          20 
          21         for (Role role : roles) {
          22 
          23             for (Auth auth : role.getAuths()) {
          24                 if (url.equals(auth.getUrl())) {
          25                     i = true;
          26                     break;
          27                 }
          28             }
          29             if (i == true) {
          30                 break;
          31             }
          32 
          33         }
          34 
          35         if (i) {
          36             return invocation.invoke();
          37         } else {
          38             return "noAuth";
          39         }
          40 
          41     }
          42 
          43 }
          View Code
        •   权限列表:
  • 相关阅读:
    zoj 1239 Hanoi Tower Troubles Again!
    zoj 1221 Risk
    uva 10192 Vacation
    uva 10066 The Twin Towers
    uva 531 Compromise
    uva 103 Stacking Boxes
    稳定婚姻模型
    Ants UVA
    Golden Tiger Claw UVA
    关于upper、lower bound 的探讨
  • 原文地址:https://www.cnblogs.com/xulisha123/p/java.html
Copyright © 2011-2022 走看看