锁定老帖子 主题:使用AOP做权限控制
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (8)
|
|
---|---|
作者 | 正文 |
发表时间:2011-06-07
实际上还是对Action进行拦截 要进行权限判断 还是要借用Session 好在Struts2中HttpSession变成了Map<String,Object>
|
|
返回顶楼 | |
发表时间:2011-06-07
这应该是不错的思路
|
|
返回顶楼 | |
发表时间:2011-06-07
最后修改:2011-06-07
huiseyiyu 写道 我现在的做法是把功能权限和数据权限分两个拦截器处理,菜单权限是一次加载的,通过点击菜单进入功能权限判断该菜单有哪些功能,由于是ext做的界面,所以就不方便用标签了,进入数据权限过滤,判断该用户的角色该菜单下可发以看到哪些数据,多少数据,最后执行action的方法,感觉不爽的是操作几乎都需要进行数据库的交互,而且对应的server方法的hql语句需要开发人员做特殊的处理,目前为了使其通用性,采用的动态hql语句的方式,不知道有没有什么好的方法,小弟借鉴下
关于菜单权限,我们之前的做法是把有权限的菜单当作权限点全部存入数据库,然后当用户登录的时候,一次性读出用户所有菜单的权限。菜单分为三级,一次菜单,二级菜单,三级按钮(添加,删除,修改等)。 如果用户有这个菜单的权限code,就可以使用这个菜单。至于是隐藏还是禁用,由界面端自行控制。 |
|
返回顶楼 | |
发表时间:2011-06-07
huiseyiyu 写道 我现在的做法是把功能权限和数据权限分两个拦截器处理,菜单权限是一次加载的,通过点击菜单进入功能权限判断该菜单有哪些功能,由于是ext做的界面,所以就不方便用标签了,进入数据权限过滤,判断该用户的角色该菜单下可发以看到哪些数据,多少数据,最后执行action的方法,感觉不爽的是操作几乎都需要进行数据库的交互,而且对应的server方法的hql语句需要开发人员做特殊的处理,目前为了使其通用性,采用的动态hql语句的方式,不知道有没有什么好的方法,小弟借鉴下
关于数据权限,我使用过SQL语句拦截,把拦截的SQL语句作为子查询,然后加where条件。如 select * from (select * from user) where .. where后面的是可以配置的。 |
|
返回顶楼 | |
发表时间:2011-06-07
还是用拦截器来封装你的权限控制逻辑比较好,这样便于视图的跳转~~
|
|
返回顶楼 | |
发表时间:2011-06-07
fantasy 写道 huiseyiyu 写道 我现在的做法是把功能权限和数据权限分两个拦截器处理,菜单权限是一次加载的,通过点击菜单进入功能权限判断该菜单有哪些功能,由于是ext做的界面,所以就不方便用标签了,进入数据权限过滤,判断该用户的角色该菜单下可发以看到哪些数据,多少数据,最后执行action的方法,感觉不爽的是操作几乎都需要进行数据库的交互,而且对应的server方法的hql语句需要开发人员做特殊的处理,目前为了使其通用性,采用的动态hql语句的方式,不知道有没有什么好的方法,小弟借鉴下
关于数据权限,我使用过SQL语句拦截,把拦截的SQL语句作为子查询,然后加where条件。如 select * from (select * from user) where .. where后面的是可以配置的。 我的做法定义一个baseaction,所有的action都继承这个父类,在父类中定义变量,假设有哪些功能List funs; 哪些机构List orgs;然后再拦截中把JoinPoint强转为BaseAction 然后你就可以随意的进行操作了,根据不同情况更改BaseAction中的变量值,同时获取session的方法也可以放在BaseAction中,你在拦截类中可以轻松获取,对于变量的一些值,在拦截器过滤后就塞入了,执行到业务action具体方法时就可以获取使用了,至于如何使用,可以根据大家业务和架构的不同定义,但对于功能在开始的时候就抓取到,当时是我在做上个系统时使用的,感觉权限应用不及时,需要重复登陆才能获取当前权限,而且登陆的时候做权限的内存匹配时间太长,所以想采用后查询的方式,点击菜单的时候在去获取菜单响应的功能 |
|
返回顶楼 | |
发表时间:2011-06-07
fantasy 写道 huiseyiyu 写道 我现在的做法是把功能权限和数据权限分两个拦截器处理,菜单权限是一次加载的,通过点击菜单进入功能权限判断该菜单有哪些功能,由于是ext做的界面,所以就不方便用标签了,进入数据权限过滤,判断该用户的角色该菜单下可发以看到哪些数据,多少数据,最后执行action的方法,感觉不爽的是操作几乎都需要进行数据库的交互,而且对应的server方法的hql语句需要开发人员做特殊的处理,目前为了使其通用性,采用的动态hql语句的方式,不知道有没有什么好的方法,小弟借鉴下
关于数据权限,我使用过SQL语句拦截,把拦截的SQL语句作为子查询,然后加where条件。如 select * from (select * from user) where .. where后面的是可以配置的。 你的sql语句拦截是如何做的,可否详述? |
|
返回顶楼 | |
发表时间:2011-06-07
年初做的一个权限拦截大概是这样的:
页面请求-->spring aop-(没有权限抛出异常)->异常拦截器-->错误页面 上面这种方式最大的问题是抛出异常会消耗很大的开支,所以我感觉用拦截器已经足够了: 页面请求-->权限拦截器-(没有权限)->错误页面 |
|
返回顶楼 | |
发表时间:2011-06-07
角色权限:根据用户所拥有的角色,查出用户所拥有的权限。
采用过滤器,拦截用户的请求URL,判断用户是否有该权限使用权利。 数据权限: 在用户已有权限的基础上,只允许查询某一部分数据。 以上是个人理解。 怎么做到拥有不同角色的用户在同时拥有某一权限的基础上,查询出不同的数据? 这个问题困扰了我很久,不知现在又没有成熟的做法? 一个思路就是,在把权限,赋给角色时,指定获取数据的范围。 |
|
返回顶楼 | |
发表时间:2011-06-08
spring security..?
|
|
返回顶楼 | |