实现简单的权限管理系统

工作中开发一个网站,设计有所变动,原计划是从第三方系统获取权限,现在变成了我们的网站自己要注册用户,并且要进行权限的控制,这样,我们就要在我们的系统上完成一个三级角色权限的角色权限管理系统。
准备从网上找一个直接介绍使用spring mvc 实现的角色权限管理系统来进行参考,找了一圈发现,要么太简单,要么太复杂。
我们的系统不涉及多级部门之类的内容,只包括平台管理员,组织管理员,普通用户三部分,其中组织相当于部门。那么好,现在只是参考部分文档的实现方式,当时权限系统自己设计。
故事:不同级别的用户登录后要能选择自己当前登录的组织,并在该回话中进行自己能够进行的操作。
细化:
最高级别用户(平台管理员)从前台登录后要跳转到后台系统,不能在前台进行操作。
其余两个级别的用户(组织管理员和普通组织用户)登录后要确认自己当前会话所登陆的组织,以便登陆后的操作获取组织信息和权限。
组织管理员登陆后要能看到审核相关的列表(页签),并能进行相关的审核审批操作;同时也能进行普通用户的操作。
普通用户登陆后能够看到自己的列表和自己数据、订单的查看和操作列表(页签),并能对自己创建的内容进行更新、删除等管理操作。
 
设计:(假设一个用户在使用不同组织的身份时,必须都是一个角色,即如果该用户是一个组织的管理员,那么同时他登录其他组织时也是以管理员身份登录,而不会一会是管理员一会是普通用户。如果是后一种情况,则需要在用户-组织映射表中加入该映射的角色)
用户表:存储用户数据(注册时添加)
用户-组织映射表(存储用户与组织的管理)
组织表(存储组织信息)
系统角色表(存储系统内角色,按照当前规划应该具有三个角色:平台管理员,组织管理员,普通用户)
角色权限表(该表存储已经创建的角色所能进行的操作<可能以该操作触发的url的方式存储>,以及展现的页面等)
【===============================================】
以上为今天的数据库设计,代码实现可能参考一些spring mvc注解的方式进行实现。
可能参考资料:
《blog.csdn.net/ycyk_168/article/details/18456631》
 

服务器内存溢出

昨天晚上发出来的邮件,有一台服务器又宕掉了,无法连接登录。今天去服务器上看了一下,发现服务器是正常的,但是jvm内存已经被使用完了,最后的log是java.lang.outofmemoryerror java heap space,时间是昨天晚上接近零点,就是说昨天晚上接收到这些请求报出这些 错误之后就不再处理请求了。
之前怀疑是由于jdk版本的原因,导致的是堆外内存泄露,从而导致我们的服务器宕机。然而现在从我们观察到的日志来看,并不是堆外内存导致的服务无法使用,而是Java虚拟机内部内存无法回收导致的(在JVM中如果98%的时间是用于GC且可用的 Heap size 不足2%的时候将抛出此异常信息)。那么也就是说,应该不是jdk版本中堆外内存回收机制的bug导致的我们系统崩溃,而是我们的代码中确实存在不合理的代码,导致Java虚拟机内存资源被持续占用得不到释放。
上面这个报出此异常的条件是从网上搜索得来的,需要从其他地方进行查证后再确认。
需要仔细研究一下Java虚拟机内存的分配、使用机制,对此足够的熟悉才能从这些现象中就找到触发这些问题的根本可能原因,不像现在两眼一抹黑,完全无头绪让人牵着走。这感觉太难受了。
之前的使用不同jdk版本进行压力测试的计划继续执行(原来这个计划应该是为了观察是否有高版本比低版本更好的堆外内存回收机制处理方法的,虽然我现在觉得这个测试已经意义不大,但是现在主导人将这个计划的目标定位为确定高版本jdk比低版本整个有更好的gc机制),正好这个计划执行期间有非常多的空余时间,我趁这个机会阅读一些Java虚拟机对于内存的管理方法相关的内容,尽量也了解一些Linux对于内存的管理机制。这两块都太不熟悉。
对于java.lang.outofmemoryerror java heap space这个错误的解决方案,这篇博文比国内搜到的大多数内容都好太多《https://blogs.opcodesolutions.com/roller/java/entry/solve_java_lang_outofmemoryerror_java》。
留:《https://outofmemory.cn/c/java-outOfMemoryError》

我之内存管理分析之不足

截止目前为止,对于我们正在做的性能测试有了一点概念,但是对于我们这次要做得到的东西仍然没有一个深刻的了解。原因有如下几个方面:
1、我之前只是听说过而没有接触过性能测试方面的东西,这次上来之后对于服务器上的一系列操作 ,查看,和压力测试工具的使用,以及内存分析工具在Linux上的安装和使用,都有些摸不到头绪。工具的安装还好,从网上找一下教程,然后针对本地服务器的情况做适当修改进行操作就行了。但是网上的教程也是基于一定的基础来做的,现在是我对这部分基础都了解的不够,这导致我拿起来一个软件,凑凑合合安装完成后,依然不知道怎么用,有的甚至卡在不知道怎么启动上面。wired。
2、对于系统,尤其是服务器方面的内存管理没有什么 概念。这要牵扯到我当时的操作系统本身 就学的不怎么样,现在不只是说jvm的内存管理,出的问题还是jvm的堆外内存溢出。这个概念我差不多就是第一次接触。在随后的接触和处理过程中,主逐渐发现,现在对于“jvm堆外内存溢出”这个结论也只是猜测而已,并没有定论。技术领导想要通过这次性能测试来判断是否是jvm堆外内存溢出,如果是,那么我们可以选择升级线网环境的jdk版本来fix之前出现的bug,如果不是,那么我们就得再使用其他角度进行性能测试,并争取复现bug,并解决。
3、对于Java虚拟机和Java内存个管理,没有进行过深入的研究。虽然自开始做开发,就是使用Java,jsp和Java的一些框架等,但是对于Java真正核心的jvm的机制,管理内存的方法等,都没有了解过。(好吧时间有点紧写的仓促一些)
问题已经发现,但是解决却不是一时半会就能解决的。长时间忽视自己Java基础的深入,以为能做普通开发,能顺畅使用Java(实际这个也没能)语言进行开发就可以了。这只是一个很初级的程序员能够干活的要求。想要成为更高层次的程序员,设计师,架构师,技术经理等,必须对更深入的问题有研究,有了解,能够理解并处理这些问题。
从这次处理这个问题开始,我需要了解的一些东西:
1、Java内存处理的机制,方法。
2、jvm运行机制和方法。实际上,貌似这两个应该是同一个。
3、压力测试的相关的一些基础。
从网上着一些资料,好好熟悉一下。
以下为部分需要参考文档
《https://wenku.baidu.com/view/2e3f652cb4daa58da0114a1a.html》
《https://wenku.baidu.com/view/b965f6c30c22590102029d60.html》
以及性能测试文档