`
OuYangGod
  • 浏览: 53773 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Session中的Menus在别的用户登录后被篡改

 
阅读更多
  今天,已经上线的项目,客户忽然那边报出一个bug来。
  
  bug描述如下:
  在PC1下以user1登录系统,接着以user2在PC2登录系统,之后user1的部分菜单变成了user2的菜单。

  当时觉得这个bug很不可思议,因为系统是一个项目组的子项目,是一个web程序,菜单都是在用户登录系统的时候写进session里面的,在不同的PC上登录怎么会相互影响呢?查了很久还没找出原因。

  后来想起不久前对系统做过一次压力测试,为了提高登录时的效率,对取菜单这部分做过优化。开始时系统的菜单是采用层次的方法划分的,也就是一级菜单、二级菜单,角色的分配是直接指定二级菜单,所以每次在登录取菜单时会直接取出所有的一级菜单,再根据用户的角色取出相应的二级菜单,接着把菜单组织成树型结构放入session中。优化的时候对取一级菜单加上了cache,就是因为加上了这个cache才导至了今天的bug。

  ibatis配置文件中取一级菜单的代码:

<cacheModel id="module-level-cache" type="LRU" readOnly="true">
    <flushInterval hours="5"/>
    <flushOnExecute statement="insertModule"/>
    <flushOnExecute statement="updateModule"/>
    <flushOnExecute statement="deleteModule"/>
    <property name="size" value="100" />
</cacheModel>

<select id="getModulesByLevel" parameterClass="ParamModuleHolder"
            resultMap="ModuleResult" cacheModel="module-level-cache">
        select * from MODULE 
    <dynamic prepend="where">
        <isNotNull prepend="AND" property="moduleLevel">
            MODULE_LEVEL = #moduleLevel#
        </isNotNull>
    </dynamic>
    <isNotNull property="sortField">
        order by $sortField$
    </isNotNull>
    <isNull property="sortField">
        order by SHOW_SORT
    </isNull>
</select>

  分析一下,原因是这样的:user1登录系统时,从数据库中取出并组织好菜单,这时,一切正常;但当user2登录系统后,因为一级菜单已经在cache中,这时会直接从jvm中拿一级菜单这个list对象,并把user2的二级菜单放入这个list对象中相应的位置。虽然user1和user2有各自己的session,但是session中的菜单对象都指向了同一个对象,所以user1用户的部分菜单就变成user2的了。

  把cache拿掉后,一切恢复正常。
分享到:
评论

相关推荐

    iStat Menus

    **iStat Menus** 是一款专为Mac用户设计的强大系统监控工具,它允许用户自定义配置,以便实时监测和管理CPU、内存、能耗、传感器以及风扇等关键硬件状态。这款软件以其直观的界面和详尽的数据展示而备受赞誉,帮助...

    分享istat menus 6账号

    在实际使用中,软件往往会要求用户登录账号,而有些账号可能因为授权、购买或者个人原因成为了可分享资源。 标签中仅包含了“istat menus 6”,这进一步强化了文档与iStat Menus 6软件的关联性。当用户搜索相关内容...

    iStat menus

    安装完毕后,iStat Menus会在你的菜单栏中自动启动,并开始显示各种系统统计数据。用户可以根据个人需求自定义显示的项目,比如选择显示CPU负载、内存使用、网络上传和下载速度等。此外,iStat Menus还支持自定义...

    ajax menus

    Ajax是一种Web开发技术,用于创建异步Web应用程序,它可以增强用户体验,使页面在用户交互时仅更新部分区域,而无需重新加载整个页面。 【文件解析】: 1. **ExtMenu.css**:这是样式表文件,包含了定义菜单外观和...

    CSS下拉菜单设计专家 Visual Infinite Menus

    用户可以导入项目文件(如“infinite_menus1.zip”),然后在编辑器中进行编辑和预览。文档如“Visual Infinite Menus初体验CSS下拉菜单设计专家 Visual Infinite Menus初体验.doc”则提供了详细的步骤指南和技巧...

    iStat Menus 6.4.1beta.zip

    在6.4.1beta版本中,我们期待看到iStat Menus在性能提升、用户体验优化以及与最新硬件的兼容性方面都有所增强。尽管这是一个测试版本,但它通常会包含最新的开发成果和修复,以满足用户的需求。用户在使用过程中遇到...

    iStat Menus6.4.1.zip

    《iStat Menus 6.4.1:Mac...通过安装解压后的"iStat Menus.app",用户即可开始享受这一强大工具带来的便利。在日常使用中,定期检查和监控系统状态,将有助于保持Mac的最佳运行状态,避免因硬件问题导致的不必要困扰。

    iStat Menus for mac 6.31-TNT.zip

    在实际使用中,iStat Menus 6.31-TNT版本不仅提供了丰富的监控选项,还拥有简洁直观的界面,使得用户无需专业知识也能轻松理解各项指标。软件的更新和维护也相当及时,保证了与最新版Mac OS的兼容性。 总的来说,...

    过渡很平滑的Infinite Menus.rar

    在"过渡很平滑的Infinite Menus"中,可能是通过在用户滚动或点击时动态加载更多的菜单项,从而实现无限滚动的效果。这样的设计对于内容丰富的网站尤其适用,它避免了传统菜单因项目过多导致的混乱,同时也降低了用户...

    infinite_menus 下拉菜单软件

    无限下拉菜单是一种常见的网页交互设计技术,常用于网站导航,提供丰富的层次结构,使得用户能够在不离开当前页面的情况下访问更多的子菜单选项。"infinite_menus" 软件可能是专门设计来帮助开发者创建这种交互式...

    Laravel开发-laravel-menus

    在这个片段中,如果用户已登录(`Auth::check()`返回`true`),则会显示“控制台”链接。 为了在视图中输出菜单,你可以将菜单对象传递给Blade模板,然后使用`@menu`指令: ```blade @menu($menu) ``` 或者,如果...

    Laravel开发-menus

    在Laravel框架中,开发一个菜单系统可以帮助我们更好地组织网站的导航结构,提供灵活的定制选项,以及在多个地方重用导航元素。标题"laravel开发-menus"指的是创建一个独立于Laravel核心但适用于该框架的菜单构建器...

    istat menus for OS X 10.9 稳定运行没bug,公网IP正常显示!

    1. **实时监控**:istat menus 可以在菜单栏中显示详细的系统资源使用情况,包括CPU、内存、磁盘、网络和传感器等模块,帮助用户了解系统运行状况。 2. **自定义设置**:用户可以根据个人需求选择要显示的监控项目...

    Android代码-FlyoutMenus

    FlyoutMenus Simple material-style flyout menus for Android. There are many flyout type menus for Android, but this one is mine. compile 'org.zakariya.flyoutmenus:flyoutmenu:0.5.3' minSdkVersion: 14 ...

    解决打开Dreamweaver出错,menus.xml创建菜单时遇到问题

    “Dreamweaver从现存的menus.xml创建菜单时遇到问题。请删除现在的menus.xml文件并重命名menus.bak到menus.xml“,你只要安装一个出错,任何版本也不能避免,装了一样出错,这方法很容易解决你的问题。

    iStat Menus.app.zip

    在压缩包中的"iStat Menus.app"是这款应用的主程序文件,解压并安装后即可启动使用。需要注意的是,为了确保插件能够正常工作,需要给予相应的系统权限。通常,安装过程中会提示用户进行授权,遵循指导操作即可。 ...

    Istat Menus 6.4.1 (1135)

    您可以及时查看分析您的CPU和GPU,内存,磁盘,网络,传感器,电池或时间,别外还支持在mac的任务栏显示天气,iStat Menus 是用于监控系统状态的不二之选,装机必备,不容错过! Istat menu 6.4.1(1135) 官方版本 ...

Global site tag (gtag.js) - Google Analytics