日期:2014-05-18  浏览次数:20689 次

权限菜单缓存问题?
本帖最后由 sunshine_love 于 2013-11-07 16:04:21 编辑
需要处理一个权限菜单的问题:登录之后,从数据库查出用户能操作的菜单展示给用户;

数据表是通用的权限设计,就是角色和组共同决定用户的操作,现在碰到一个问题,就是用户菜单的缓

存问题,现有两种方案,望大家帮忙分析下,或有更好的解决方法,不吝赐教。
    第一种:从从数据库读出之后,使用memcache缓存,缓存中有,就使用之,反之则重新查询;
    第二种:从从数据库读出之后,为每个用户创建一个文件,记录用户的权限,如有改动,即更新该文件,用户以后登录,每次都从该文件读取。

由于我需要拦截用户的操作来判断用户是否拥有该操作,所以,用户菜单的缓存肯定会经常访问。

恳请大家给予宝贵的意见,在线等……
缓存 设计 j2ee

------解决方案--------------------
我感觉第一种好点:
 第一种:从从数据库读出之后,使用memcache缓存,缓存中有,就使用之,反之则重新查询;
------解决方案--------------------
缓存的问题有非常多种
1.经济的方法将用户权限存入Session,但是Session生命周期的不确定性会导致内存消耗。
2.使用外部缓存,但是需要让你的程序为了这么一点点的功能,使用非常重的配置

我习惯使用自定义Taglib加Session存入可访问菜单ID的方式来处理这种问题,自定义的taglib检查用户连接是否可见。页面上直接输出所有的菜单
通过自定义注解注释控制器,通过AOP做服务器级的权限控制
保证不该看见的url你看不见,不该访问的控制器你不能访问

------解决方案--------------------
spring security ,网上找找有没有例子 。这个做权限很好了,不用什么数据库缓存什么的 。而且资源都是根据权限来控制的。也就是说你做好后台的过滤,访问一个资源的时候,如果当前用户没这个权限。那么直接就跳转去一个无权页面。找不到可以找我,我做过用户权限这块。
------解决方案--------------------
权限应当是分级处理:
1、组 对应一级,处理数据库应当就可以;
2、角色 对应 二级至三级,处理数据库也可以;
3、增删改查 对应 视图(包括分部视图),这个地方要是缓存是有意义的;

针对楼主的这个需求,没必要再搞什么缓存,意义不大。
------解决方案--------------------
用  memcache 同时你也可以看看spring security 。
------解决方案--------------------
必须第一种,缺点:memcache本地缓存,劣势够为明显 建议利用集中式缓存,例如redis
------解决方案--------------------
你的用户权限数据量大吗?少于10万建议自己写个简单Cache类,用Map来存放数据,简单省事。如果数据量特别大,那还是用第三方的吧,效率高些。
------解决方案--------------------


我也在学习这个 需求和你差不多

不过我用的是 shiro管理权限  用ehcache来缓存
------解决方案--------------------
倾向选择第一种
------解决方案--------------------
我一般将所有用户的权限在应用启动时从数据库中拿出来,建个XML,用application来缓存..调用很方便.不知道适合你不