另外还问一下:
为什么有的系统用AOP来做权限控制,和用过滤器有什么区别吗?
AOP和过滤器的区别我知道的,我是想问这两种不同的方式做权限控制,各在什么场合下比较合适。

解决方案 »

  1.   

    你的action可以继承 MappingDispatchAction 这样就不用method 参数了
      

  2.   

    把权限表里面的所有东西全部查出来放在map里面,这样就不用写if else了
      

  3.   

    LZ可以看一下这篇文章
    http://dev.yesky.com/25/2478525.shtml
      

  4.   

    关于权限控制的数据库表设计,请参看http://www.noahweb.net/mail/2/Project.htm
      

  5.   

    我不太清楚楼主的困惑在那里1种方案
    功能和角色是多对多
    角色和用户是一对多
    2种方案
    功能和角色是多对多
    组和角色是多对多
    组和用户是一对多3.兼容方案
    用户和功能多对多你可以选择:
    方案1或方案2或(方案1/方案2)+方案3
    一条sql就能判断出来是否有权限,做好索引
    使用拦截器就行了,应该是所有的请求都走.do
    功能编号直接随便排1.......10000
     判断是否有权限无需那么多if else 直接一条sql看看当前用户能不能取到数就行了(这里面可以做个cache,cache最好有失效时间,修改权限结构时清除全部cache,另外注意sql注入)
      

  6.   

    直接一条sql看看当前用户能不能取到数就行了
    的意思就是写一条sql就可以知道当前用户是否有访问某功能的权限,我不喜欢用csdn的短消息,感觉比较鸡肋,呵呵.
    这一条sql好好优化下,不会有性能问题的,lz放心吧.
      

  7.   

    针对我的设计,好像你说的方法不能实现的。我还是需要判断是什么操作才能到数据库去查询,因为那个权限哪里我用的INT的位来表示的是否有权限。
    模块表是只有模块名称的,而不是功能表,没有记录到功能的。
      

  8.   

    关于越权访问 我说一点就是,url不给用户显示
      

  9.   


    我说的是一个思路,你不能指望大家完全按你的需求做,我觉得那样的答案太难寻找了,模块表你当成功能表不就行了吗,你增加一个模块编号不就行了,至于int位,可以在数据库中或java中做映射啊!,你再想想.
      

  10.   

    我觉得,这个问题是很好解决的,不过走的是另外一条路。
    一般我做这个权限控制的时候,都是在用户登陆的时候,就把其权限写入到SESSION中固定的位置如session("***")。然后在所有执行页面取得此用户的session("***")值。如果是NULL说明未登陆,然后可以自己规定为0是什么权限为1是什么权限。
    这样的好处是:反正在登陆的时候要查询数据库,顺带做一下权限检测也不会浪费什么时间的。另外重新判断的话是不需要查询数据库的,而且可以很轻松地分级,实现多种操作权限,并且代码编写也非常容易。
    坏处么,我也不清楚,要不然自己也不会用这种方式了。