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
        •   权限列表:
  • 相关阅读:
    Java main方法继承
    MySQL 事务
    数据库日志文件和内存刷新机制
    MySQL 存储过程
    MySQL 索引
    JVM锁优化
    JVM字节码执行引擎和动态绑定原理
    虚拟机类加载机制
    JVM内存分配与回收
    JVM垃圾收集器
  • 原文地址:https://www.cnblogs.com/xulisha123/p/java.html
Copyright © 2011-2022 走看看