今天,已经上线的项目,客户忽然那边报出一个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** 是一款专为Mac用户设计的强大系统监控工具,它允许用户自定义配置,以便实时监测和管理CPU、内存、能耗、传感器以及风扇等关键硬件状态。这款软件以其直观的界面和详尽的数据展示而备受赞誉,帮助...
在实际使用中,软件往往会要求用户登录账号,而有些账号可能因为授权、购买或者个人原因成为了可分享资源。 标签中仅包含了“istat menus 6”,这进一步强化了文档与iStat Menus 6软件的关联性。当用户搜索相关内容...
安装完毕后,iStat Menus会在你的菜单栏中自动启动,并开始显示各种系统统计数据。用户可以根据个人需求自定义显示的项目,比如选择显示CPU负载、内存使用、网络上传和下载速度等。此外,iStat Menus还支持自定义...
Ajax是一种Web开发技术,用于创建异步Web应用程序,它可以增强用户体验,使页面在用户交互时仅更新部分区域,而无需重新加载整个页面。 【文件解析】: 1. **ExtMenu.css**:这是样式表文件,包含了定义菜单外观和...
用户可以导入项目文件(如“infinite_menus1.zip”),然后在编辑器中进行编辑和预览。文档如“Visual Infinite Menus初体验CSS下拉菜单设计专家 Visual Infinite Menus初体验.doc”则提供了详细的步骤指南和技巧...
在6.4.1beta版本中,我们期待看到iStat Menus在性能提升、用户体验优化以及与最新硬件的兼容性方面都有所增强。尽管这是一个测试版本,但它通常会包含最新的开发成果和修复,以满足用户的需求。用户在使用过程中遇到...
《iStat Menus 6.4.1:Mac...通过安装解压后的"iStat Menus.app",用户即可开始享受这一强大工具带来的便利。在日常使用中,定期检查和监控系统状态,将有助于保持Mac的最佳运行状态,避免因硬件问题导致的不必要困扰。
在实际使用中,iStat Menus 6.31-TNT版本不仅提供了丰富的监控选项,还拥有简洁直观的界面,使得用户无需专业知识也能轻松理解各项指标。软件的更新和维护也相当及时,保证了与最新版Mac OS的兼容性。 总的来说,...
在"过渡很平滑的Infinite Menus"中,可能是通过在用户滚动或点击时动态加载更多的菜单项,从而实现无限滚动的效果。这样的设计对于内容丰富的网站尤其适用,它避免了传统菜单因项目过多导致的混乱,同时也降低了用户...
无限下拉菜单是一种常见的网页交互设计技术,常用于网站导航,提供丰富的层次结构,使得用户能够在不离开当前页面的情况下访问更多的子菜单选项。"infinite_menus" 软件可能是专门设计来帮助开发者创建这种交互式...
在这个片段中,如果用户已登录(`Auth::check()`返回`true`),则会显示“控制台”链接。 为了在视图中输出菜单,你可以将菜单对象传递给Blade模板,然后使用`@menu`指令: ```blade @menu($menu) ``` 或者,如果...
在Laravel框架中,开发一个菜单系统可以帮助我们更好地组织网站的导航结构,提供灵活的定制选项,以及在多个地方重用导航元素。标题"laravel开发-menus"指的是创建一个独立于Laravel核心但适用于该框架的菜单构建器...
百分百可用,也可以安装正版然后输入这里的邮箱及序列号。 iStat Menus 6是最新版的状态栏显示工具,相比较上一版本优化了很多内容,值得推荐
1. **实时监控**:istat menus 可以在菜单栏中显示详细的系统资源使用情况,包括CPU、内存、磁盘、网络和传感器等模块,帮助用户了解系统运行状况。 2. **自定义设置**:用户可以根据个人需求选择要显示的监控项目...
“Dreamweaver从现存的menus.xml创建菜单时遇到问题。请删除现在的menus.xml文件并重命名menus.bak到menus.xml“,你只要安装一个出错,任何版本也不能避免,装了一样出错,这方法很容易解决你的问题。
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 ...
在压缩包中的"iStat Menus.app"是这款应用的主程序文件,解压并安装后即可启动使用。需要注意的是,为了确保插件能够正常工作,需要给予相应的系统权限。通常,安装过程中会提示用户进行授权,遵循指导操作即可。 ...
您可以及时查看分析您的CPU和GPU,内存,磁盘,网络,传感器,电池或时间,别外还支持在mac的任务栏显示天气,iStat Menus 是用于监控系统状态的不二之选,装机必备,不容错过! Istat menu 6.4.1(1135) 官方版本 ...