最近面试问这个问题,我一直回答不到点子上,数据库怎么设计,怎么用到拦截器?

解决方案 »

  1.   

    需要五张表:
    A.角色表,存放各种角色信息
    B.用户表,存放用户信息
    C.权限表,存放相关权限信息
    D.角色权限关系表,存放各种角色和权限之间的关系,即每种角色都有什么权限,一个角色可以有多种权限
    E.用户角色关系表,存放用户和角色关系,即每个用户都是那种角色,一个用户可以有多个角色。这就是数据库需要的基本数据表。程序中拦截器拦截到用户的某个操作后,通过用户信息查询其角色,然后通过角色查询是否具有每种权限,如果有就放行,没有就阻断。
      

  2.   

    你这个 我直接给你个我们以前设计的系统表好了/**
     * 角色Entity
     */
    @Entity
    @Table(name = "main_role")
    @Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
    public class Role extends BaseEntity { private static final long serialVersionUID = 1L;
    private Long id;  // 编号
    private String name; // 角色名称
    private String delFlag; // 删除标记(0:正常;1:删除) private List<User> userList = Lists.newArrayList(); // 拥有用户列表
    private List<Menu> menuList = Lists.newArrayList(); // 拥有菜单列表 public Role() {
    this.delFlag = DEL_FLAG_NORMAL;
    } public Role(Long id, String name) {
    this();
    this.id = id;
    this.name = name;
    }
    }
    /**
     * 菜单Entity
     */
    @Entity
    @Table(name = "main_menu")
    @Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
    public class Menu extends BaseEntity { private static final long serialVersionUID = 1L;
    private Long id; // 编号
    private Menu parent; // 父级菜单
    private String parentIds; // 所有父级编号
    private String name;  // 名称
    private String href;  // 链接
    private String target;  // 目标( mainFrame、_blank、_self、_parent、_top)
    private String icon;  // 图标
    private Integer sort;  // 排序
    private String isShow;  // 是否在菜单中显示(1:显示;0:不显示)
    private String permission; // 权限标识
    private String delFlag; // 删除标记(0:正常;1:删除)

    private List<Menu> childList = Lists.newArrayList();// 拥有子菜单列表
    private List<Role> roleList = Lists.newArrayList(); // 拥有角色列表
    }
    /**
     * 角色Entity
     */
    @Entity
    @Table(name = "main_role")
    @Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
    public class Role extends BaseEntity { private static final long serialVersionUID = 1L;
    private Long id;  // 编号
    private String name; // 角色名称
    private String delFlag; // 删除标记(0:正常;1:删除) private List<User> userList = Lists.newArrayList(); // 拥有用户列表
    private List<Menu> menuList = Lists.newArrayList(); // 拥有菜单列表看上面3个JAVA类(省略了GET/SET 方法),然后看Role.javaprivate List<Menu> menuList = Lists.newArrayList(); // 拥有菜单列表拥有菜单 就表示拥有权限,比如用户在登入系统的时候,取出该用户所有的菜单(权限),然后二级缓存存起来, 当我们发送请求的时候,通过Filter看看二级缓存中用户有没有这个权限莫有的话,,,,直接 foword一个页面 提示 权限不够
      

  3.   


    链接地址,你怎么控制它的菜单以及菜单里面 报表的增删改查
    我觉得一楼这个方法不好,因为如果连跳转的页面url都放在数据库,那么这对数据库的请求也太频繁了吧。
    如果要我说,首先用户表要有相应的字段表示权限,如0,1,2……在拦截器Filter里面,记录各种权限不同的用户分别有哪些页面不能进入的,因为在大多数情况下,只有少部分页面是有权限限制的。那么就可以通过这个Filter进行过滤了。
      

  4.   


    拦截器,在web.xml里面是怎么配置的?有代码例子吗?
      

  5.   


    链接地址,你怎么控制它的菜单以及菜单里面 报表的增删改查
    我觉得一楼这个方法不好,因为如果连跳转的页面url都放在数据库,那么这对数据库的请求也太频繁了吧。
    如果要我说,首先用户表要有相应的字段表示权限,如0,1,2……在拦截器Filter里面,记录各种权限不同的用户分别有哪些页面不能进入的,因为在大多数情况下,只有少部分页面是有权限限制的。那么就可以通过这个Filter进行过滤了。怎么配置拦截器?
      

  6.   


    链接地址,你怎么控制它的菜单以及菜单里面 报表的增删改查
    我觉得一楼这个方法不好,因为如果连跳转的页面url都放在数据库,那么这对数据库的请求也太频繁了吧。
    如果要我说,首先用户表要有相应的字段表示权限,如0,1,2……在拦截器Filter里面,记录各种权限不同的用户分别有哪些页面不能进入的,因为在大多数情况下,只有少部分页面是有权限限制的。那么就可以通过这个Filter进行过滤了。怎么配置拦截器?你说的是在web.xml中配置拦截器吗?下面的典型的例子:<!-- 定义Filter -->
    <filter>
    <!-- Filter的名字 -->
    <filter-name>authority</filter-name>
    <!-- Filter的实现类 -->
    <filter-class>lee.AuthorityFilter</filter-class>
    <!-- 下面3个init-param元素配置了3个参数 -->
    <init-param>
    <param-name>encoding</param-name>
    <param-value>GBK</param-value>
    </init-param>
    </filter>
    <!-- 定义Filter拦截的URL地址 -->
    <filter-mapping>
    <!-- Filter的名字 -->
    <filter-name>authority</filter-name>
    <!-- Filter负责拦截的URL -->
    <url-pattern>/*</url-pattern>
    </filter-mapping>
      

  7.   


    链接地址,你怎么控制它的菜单以及菜单里面 报表的增删改查
    我觉得一楼这个方法不好,因为如果连跳转的页面url都放在数据库,那么这对数据库的请求也太频繁了吧。
    如果要我说,首先用户表要有相应的字段表示权限,如0,1,2……在拦截器Filter里面,记录各种权限不同的用户分别有哪些页面不能进入的,因为在大多数情况下,只有少部分页面是有权限限制的。那么就可以通过这个Filter进行过滤了。怎么配置拦截器?你说的是在web.xml中配置拦截器吗?下面的典型的例子:<!-- 定义Filter -->
    <filter>
    <!-- Filter的名字 -->
    <filter-name>authority</filter-name>
    <!-- Filter的实现类 -->
    <filter-class>lee.AuthorityFilter</filter-class>
    <!-- 下面3个init-param元素配置了3个参数 -->
    <init-param>
    <param-name>encoding</param-name>
    <param-value>GBK</param-value>
    </init-param>
    </filter>
    <!-- 定义Filter拦截的URL地址 -->
    <filter-mapping>
    <!-- Filter的名字 -->
    <filter-name>authority</filter-name>
    <!-- Filter负责拦截的URL -->
    <url-pattern>/*</url-pattern>
    </filter-mapping>
    这个拦截器的类有具体代码吗?谢谢,辛苦了!!!
      

  8.   

    Filter配置 在web.xml 这样写<filter>
    <!--这里写名字-->
    <filter-name>log</filter-name>
    <!--这里写实现类-->
    <filter-class>lee.Security</filter-class>
    </filter>
    <filter-mapping>
    <!--这里写名字-->
    <filter-name>log</filter-name>
    <!--那些URL要拦截  这里都配置成都要拦截-->
    <url-pattern>/*<url-pattern>
    <filter-mapping>Filter这样子写public class Security implements Filter{
     //实现其方法  OK了
    }
      

  9.   


    链接地址,你怎么控制它的菜单以及菜单里面 报表的增删改查
    我觉得一楼这个方法不好,因为如果连跳转的页面url都放在数据库,那么这对数据库的请求也太频繁了吧。
    如果要我说,首先用户表要有相应的字段表示权限,如0,1,2……在拦截器Filter里面,记录各种权限不同的用户分别有哪些页面不能进入的,因为在大多数情况下,只有少部分页面是有权限限制的。那么就可以通过这个Filter进行过滤了。怎么配置拦截器?你说的是在web.xml中配置拦截器吗?下面的典型的例子:<!-- 定义Filter -->
    <filter>
    <!-- Filter的名字 -->
    <filter-name>authority</filter-name>
    <!-- Filter的实现类 -->
    <filter-class>lee.AuthorityFilter</filter-class>
    <!-- 下面3个init-param元素配置了3个参数 -->
    <init-param>
    <param-name>encoding</param-name>
    <param-value>GBK</param-value>
    </init-param>
    </filter>
    <!-- 定义Filter拦截的URL地址 -->
    <filter-mapping>
    <!-- Filter的名字 -->
    <filter-name>authority</filter-name>
    <!-- Filter负责拦截的URL -->
    <url-pattern>/*</url-pattern>
    </filter-mapping>
    这个是过滤器哦
      

  10.   

    有兴趣看看这个http://blog.csdn.net/tianma630/article/details/8461339
    本人写的一个小例子 希望对你有帮助