精华内容
下载资源
问答
  • 一、概要通常,需要单独的权限系统是解决授权的管理和维护,再分配等难题,不针对开发而言。系统架构目标:在易于理解和管理,开发的前提下,满足绝大部分粗粒度和细粒度权限控制的功能需要。除了粗粒度权限,系统中...

    一、概要

    通常,需要单独的权限系统是解决授权的管理和维护,再分配等难题,不针对开发而言。

    系统架构目标:在易于理解和管理,开发的前提下,满足绝大部分粗粒度和细粒度权限控制的功能需要。

    除了粗粒度权限,系统中必然还会包括无数对具体Instance的细粒度权限。这些问题,被留给对框架的扩展方法来解决,这样的考虑基于以下两点:

    1、细粒度的权限判断必须要在资源上获取权限分配的支持的上下文信息才可能得以实现。

    2、细粒度的权限常常具有相当大的业务逻辑相关性。对不同的业务逻辑,常常意味着完全不同的权限判定原则和策略。相比之下,粗粒度的权限更具通用性,将其实现为一个架构,更有重用价值;而将细粒度的权限判断实现为一个架构级别的东西就显得繁琐,增加架构的复杂性。而且不是那么的有必要,用定制的代码来实现就更简洁,更灵活。否则会变成各种逻辑代码的堆砌。

    比如,product post数量的控制,这种一般要知道用户个性化的信息,付钱数量到数据库中查找最高数量,还要知道此用户已经有多少产品等,规则不具备通用性和重用性,

    所以细粒度控制不应该放在权限架构层来解决。实例级的细粒度权限的解决方案就是将它转化为粗粒度权限,这样我们权限客户端就变得很简单了。

    名词解释:

    粗粒度权限 :一般可以通过配置文件来授权,授权只有真假,没有多少之分,不需要上下文的支持。

    不消耗资源的。

    逻辑表达式:判断“Who对What(Which)进行How的操作”的逻辑表达式是否为真。

    别名:静态授权、类级授权

    细粒度权限:不能通过配置文件等表达,需要特定上下文的支持.

    逻辑表达式:判断“When(Where)的时候,Who对What(Which)进行How的操作”的逻辑表达式是否为真。

    别名:动态授权、实例级授权

    设计原则 :

    框架只提供粗粒度的权限。

    细粒度的权限也需要集中管理和维护

    细粒度的权限通过定制的扩展代码将细粒度转化为粗粒度授权。

    二、权限系统的设计

    权限往往是一个极其复杂的问题, 设计权限系统第一个要解决的问题就是什么样的行为是需要权限控制,什么样的是业务方法。他们之间本来是没有明确的区分,任何权限从某种角度上说可以是一种业务方法。为了以后管理和开发方面我们从概念上需要将权限和业务明确划分清楚,指导开发。

    权限控制行为:  对What(Which)进行How的操作需要区分Who,具有Who身份差异性和可替换性。  我们将此类操作作为权限。

    特点: 可以收回也可以分配的,具有一定的抽象级别。       消耗资源,行为结果具备一些持久性的影响。

    业务逻辑行为:  对What(Which)进行How的操作的时候与Who的身份无关或者具有Who身份差异性但             是不具有可替换性。

    特点: 不能抽象和共享,很难回收和分配。不消耗资源,不产生持久性。现实中也存在某一时期行为是业务逻辑,最后演变成权限控制,或者相反的过程。

    1、粗粒度权限设计

    采用自主型访问控制方法,操作给予访问控制列表。每一个用户通过角色获得一组权限集合,权限系统的功能是验证用户申请的权限(集合)是否在这个集合当中,即申请的权限(集合)是否投影在用户拥有的权限集合,换句话说:只要某用户直接或者间接的属于某个Role那么它就具备这个Role的所有权限许可。

    一个自主型访问控制方法的权限系统包括以下几个部分:角色、权限、访问控制表、

    l         权限

    描述一个权限可以通过以下几个要素说明:

    类型(class):

    名称(name):

    动作(actions):

    掩码(mask):

    属性:

    具体权限Example:

    1、Test

    类型(class):com.yangjs.secutiry. permissions. TestPermission

    名称(name):如:test.* ,test.sub.* ,test.sub1.sub2

    动作(actions): brower_detail ,post,repost,……

    掩码(mask):0x1,0x2,0x4…..

    属性: 无

    .…………..

    l         存取控制器(my--acl.xml)配置

    存取控制项(ACE):角色到权限的映射集合,表示某个角色可以在某些资源上执行某些动作,它们之间通过role关联(继承),ACE之间产生包含关系。

    存取控制列表(ACL):ACE的集合。

    我们的存取控制器(ACL)是通过一个xml的配置文件说明,存取控制列表由多个存取控制项(ACE)来描述。使用方法(略)

    2、细粒度权限设计

    细粒度授权需要上下文的支持,而且每个权限控制的上下问题都不一样,这由相关的业务逻辑决定,而且此类授权一般变化较快,应此需要将强的可维护性和扩展性,支持变化,但又不能够太复杂,否则缺乏可执行性。虽然此类权限个性化较强,我们仍然可以总结出很多共性:

    1.       几乎所有的授权需要用户的角色和ID.

    2.       特定的上下文几乎都同用户资源使用情况相关.

    我们将此类信息称为UserState 即:User角色以及资源使用情况和当前状态。大部分信息我们在用户登陆的时候已经。获得。授权贯穿Web层和Biz层,因此我们的登陆要独立于Web端。因此上下文我们可以用UserState结合其他来抽象。

    关于上下文的维护问题,我们不可能将UserState此类参数在Web层和Biz层来回传递,更加不能在需要授权的地方都加上一个这样的方法参数,这样不太现实。其次如果在授权的地方再从数据库中取一次这样虽然能够解决部分问题(不能解决userId的传递),这样效率太低,不能接受。

    解决方法就是将此类信息cache起来,用的时候再去取,由于此类信息具有非常高的并发性,对线程安全较高,因此我们决定将此类信息放入一个线程上下文的内存cache中。此外我们由于引入cache,就需要解决所有cache共有的维护性问题。

    Cache的生命周期:用户的一次请求,属于线程级,用户请求线程结束,Cache结束。

    Cache的更新:当上下文信息发生变化是需要及时更新Cache,这是一个不可避免的步骤。

    Cache丢失:发生在如系统down机,线程崩溃,内存溢出等等,对用户来说就是当前请求突然中断。

    当用户重新发送请求,我们的系统就需要重新验证用户,此时我们可以更新Cache解

    决丢失问题。

    Cache的清理:这个实现就是当用户请求结束,返回应答的时候清理,可以通过Filter实现,比较简单。

    以上是相关的原理部分,我们看看系统地实现:

    实现:线程上下文的cache

    实现类:com.yangjs.cache.ThreadContextCache:

    public class ThreadContextCache {

    public static Map asMap();

    public static boolean containsKey(Object key);

    public static boolean containsValue(Object key);

    public static Object get(Object key);

    public static void put(Object key, Object value);

    public static Object remove(Object key);

    public static void clean();

    public static int size() ;

    public static void destroy()

    posted on 2007-04-16 09:17 EricWong 阅读(8573) 评论(7)  编辑  收藏 所属分类: Java

    展开全文
  • java基于B/S实现的权限管理系统,基于Struts,hibernate实现的通用权限管理系统,希望对初学者有一定的帮助
  • java权限管理系统的jar包

    千次下载 热门讨论 2012-11-10 10:42:19
    java权限管理系统的jar包配合http://www.oschina.net/code/snippet_59256_15087使用。
  • java系统权限管理设计

    2015-07-16 10:23:12
    java系统权限管理设计,详细讲解了权限管理设计和逻辑关系,以及表结构
  • java权限管理系统

    2019-02-21 16:12:47
    简单的java权限管理系统,适合初学者练手及学习,数据库包含。
  • java ssh框架权限管理系统

    热门讨论 2012-01-14 14:25:23
    java 完整ssh框架权限管理系统
  • 参考文章:http://happyqing.iteye.com/blog/1969682http://jazka.blog.51cto.com/809003/240549在java中,文件的权限对于不同的操作系统有不同的权限java 处理一些通用的权限。检查文件是否允许:file.can...

    参考文章:http://happyqing.iteye.com/blog/1969682

    http://jazka.blog.51cto.com/809003/240549

    在java中,文件的权限对于不同的操作系统有不同的权限。 java 处理一些通用的权限。

    检查文件是否允许:

    file.canExecute(); – return true, file is executable; false is not.

    file.canWrite(); – return true, file is writable; false is not.

    file.canRead(); – return true, file is readable; false is not.

    设置文件权限:

    file.setExecutable(boolean); – true, allow execute operations; false to disallow it.

    file.setReadable(boolean); – true, allow read operations; false to disallow it.

    file.setWritable(boolean); – true, allow write operations; false to disallow it.

    在*nix系统中,你可能需要配置更加明确的文件权限,如设置某个文件的权限为777.但是,java IO类没有相关方法。不过可以使用以下workaround:

    Runtime.getRuntime()。exec("chmod 777 file");

    展开全文
  • 最近准备搞一套PASS系统,先... 项目 比较简单具有以下特点:轻量级的权限系统,只涉及Spring、Shiro、Mybatis后端框架,降低学习使用成本友好的代码结构及注释,便于阅读及二次开发支持HTML、JSP、Velocity、Freema...

    最近准备搞一套PASS系统,先撸出一套权限管理系统。撸完之后,感觉有点类似于SOA一样的。很像SOA架构,我目前的分层式Web层,做页面展示,Model层做实体类。Service层做服务。

    0818b9ca8b590ca3270a3433284dd417.png

    项目 比较简单具有以下特点:

    轻量级的权限系统,只涉及Spring、Shiro、Mybatis后端框架,降低学习使用成本

    友好的代码结构及注释,便于阅读及二次开发

    支持HTML、JSP、Velocity、Freemarker等视图,零技术门槛

    灵活的权限控制,可控制到页面或按钮,满足绝大部分的权限需求

    页面交互使用Vue2.x,极大的提高了开发效率

    完善的代码生成机制,可在线生成entity、xml、dao、service、html、js代码,减少70%以上的开发任务

    引入quartz定时任务,可动态完成任务的添加、修改、删除、暂停、恢复及日志查看等功能

    引入路由机制,刷新页面会停留在当前页

    集成Redis 效率不需要担心

    登陆界面:

    0818b9ca8b590ca3270a3433284dd417.png

    下面是菜单的效果图

    0818b9ca8b590ca3270a3433284dd417.png

    0818b9ca8b590ca3270a3433284dd417.png

    由于我们的项目集成了redis,所以在使用的时候需要下载一下。linux集成比较简单,下面说一下windows的redis集成。

    首先 点击下载redis windows 64 3.2版本 点击打开链接。然后解压会得到下面的

    0818b9ca8b590ca3270a3433284dd417.png

    点击 redis.server.exe;

    0818b9ca8b590ca3270a3433284dd417.png

    出现这个界面证明安装成功;

    你可以下载一个redis客户端工具

    0818b9ca8b590ca3270a3433284dd417.png

    我这里把用户名作为key存在里面,读出来的是密码和状态还有用户id。和我们mysql的数据相对应。

    0818b9ca8b590ca3270a3433284dd417.png

    0818b9ca8b590ca3270a3433284dd417.png

    这个分层感觉思路已经错了,快要成为SOA架构了。所以后面打算把粒度拆的更细。分层更细,集成更加方便的去做。后面也会加上nginx,zookeeper,double

    0818b9ca8b590ca3270a3433284dd417.png

    差不多就是这样的一套架构,以后有时间会慢慢完善。开源代码如下点击打开链接 下载完成之后,用IDE或者eclipse打开,或者直接放入tomcat下面就可以运行。然后配置一下redis服务器就可以跑起来了。

    展开全文
  • 首先介绍下思路:1、用户表 user;...注意菜单按钮(新增、删除、修改)权限是放在中间表(user_menu)中;1、新增用户时,是要根据用户角色进行分配权限的 一定记得批量添加;批量、批量、批量,重要事情说三遍...

    首先介绍下思路:

    1、用户表 user;

    2、角色表 role;

    3、菜单 menu;

    4、角色菜单权限表 role_menu;

    5、用户菜单权限表 user_menu;

    如图:

    0818b9ca8b590ca3270a3433284dd417.png

    根据用户角色取出该角色所有权限,并对用户进行权限分配;注意菜单的按钮(新增、删除、修改)权限是放在中间表(user_menu)中的;

    1、新增用户时,是要根据用户角色进行分配权限的 一定记得批量添加;批量、批量、批量,重要的事情说三遍,不要查询角色权限,然后for循环,这样效率太低了;

    SQL如下:

    INSERT INTO sys_user_menu(UserId, MenuId, DelPower,    UpdPower,    InsPower,    ViewPower)

    SELECT #{userId} UserId, MenuId, 1 DelPower, 1 UpdPower, 1 InsPower, 1 ViewPower FROM sys_role_menu WHERE RoelId = #{roleId}

    updPower 默认都是有的 所以都是1,这样根据角色查询出权限直接添加,响应时间大大提升;

    2、修改用户角色也要记得重新分配用户权限哦!这个不能忘,可以用上面的方法;

    业务方法:

    0818b9ca8b590ca3270a3433284dd417.png

    如果角色没有修改,是不用重新分配权限的,所有userRole 重置为 null,如果角色修改则删除原权限,重新进行分配;

    3、最后要优化的就是根据用户查询权限的时候啦,我最开始是这样做的,查询角色权限,用户权限,返回到前端,前端进行处理;结果就是很卡 基本上要三到四秒,

    解决方案,一步到位;一个查询返回全部数据。

    如下SQL:

    SELECT menu.MenuId id, ParentId pid, MenuName text,

    (SELECT COUNT(1) FROM sys_user_menu WHERE UserId = #{userId} AND  MenuId = sm.MenuId) isShow,

    (SELECT CONCAT(

    (CASE WHEN smenu.InsPower = 1 THEN 1 ELSE 0 END), ',',

    (CASE WHEN smenu.DelPower = 1 THEN 1 ELSE 0 END), ',',

    (CASE WHEN smenu.UpdPower = 1 THEN 1 ELSE 0 END), ',',

    (CASE WHEN smenu.ViewPower = 1 THEN 1 ELSE 0 END))

    FROM sys_user_menu smenu WHERE smenu.UserId = #{userId}

    AND  smenu.MenuId = sm.MenuId) MenuInfo

    FROM sys_role_menu sm INNER JOIN sys_menu menu on sm.MenuId = menu.MenuId

    WHERE RoelId = #{roleId}

    首先根据 角色ID查询出权限,然后子查询用户是否有该权限,有返回1 木用返回 0;

    最后按钮权限 我是直接拼接成字符串,分别对应 添加、删除、修改、查看 1 有该按钮 0 没有该按钮;

    优化后 不管是添加、修改用户,加载用户权限都能控制在 1~2 秒;

    展开全文
  • JAVA权限管理系统

    2009-08-06 11:22:49
    JAVA权限管理系统,帮助对java的权限实现和了解
  • 系统权限: 创建用户 create user list identified by tiger; 授予创建session的权限(没有该权限,用户不能登陆数据库 ) grant create session to lisi; 授予创建表的权限 grant create table to lisi; 授予表...
  • Android是一个多进程系统,每一个应用程序(和系统的组成部分)都运行在自己的进程中。通过进程ID,系统可以区分不同的应用程序和系统组件,并赋予不同的权限。更细粒度的安全特性则通过“许可”机制来提供,该机制...
  • JAVA权限系统

    2011-11-23 16:57:05
    使用了当今最流行三大框架 struts2 hibernate spring 技术进行了用户登录及权限分配问题,里面实现了分页 树 及一些验证,希望对大家有用。数据库是SQL2005,把配置hibernate.cfg.xml配置文件中update改成create...
  • java权限系统

    2013-03-28 19:37:09
    集成了spring,struts,persister数据库持久层访问组件 完善用户,角色,菜单,任务管理
  • java权限系统源码

    2014-03-04 14:26:12
    为业务系统提供了数据权限控制的基础.在业务系统实现数据访问控制时,可以通过得到当前使用者的这些组织结构定义,再根据业务系统的数据控制要求,进行合理的数据筛选,和权限控制,来完成对业务数据的权限控制.
  • 权限管理系统在去年的项目中使用过,后来一直想单独拿出来做一个权限管理系统,一直拖着,今年做的博客当中也使用到...源代码地址:https://github.com/ShrMus/PrivilegeSystem我写的权限管理系统主要由权限、角色、...
  • 是一个简单高效的后台权限管理系统。...安全框架采用时下流行的Apache Shiro,可实现对按钮级别的权限控制;前端页面使用Bootstrap构建,主题风格为时下Google最新设计语言Material Design,并提供多套配色以供选择。
  • java作为后台,利用easyui实现权限管理系统,包含增删改查,可以给角色授予权限,给用户分配角色,使得不同角色用户登录后菜单不同。文件包含源码和mysql数据库文件以及easyui中文API
  • java+mysql权限管理系统

    热门讨论 2013-07-16 13:36:22
    很实用的权限管理系统。运用java技术mysql数据库加上S2SH三大框架开发而成的。
  • java 权限管理系统

    2009-08-07 10:15:27
    很好一个java权限管理系统,供初学者学习和研究
  • JAVA的权限管控在平台化和企业化得过程中大体经过了如下的阶段: 权限系统功能上分为两部分:认证+鉴权。 1. 标准JAAS时代。在最早的时候,J2ee时代,Java提出了标准的鉴权服务,即jaas。tomcat,jboss,...
  • 实现业务系统中的用户权限管理B/S系统的权限比C/S中的更显的重要,C/S系统因为具有特殊的客户端,所以访问用户的权限检测可以通过客户端实现或通过客户端+服务器检测实现,而B/S中,浏览器是每一台计算机都已具备...
  • java轻量级的权限系统和服务端模板
  • Java系统权限控制-设计

    千次阅读 2019-03-04 14:26:48
     B/S系统的权限比C/S中的更显的重要,C/S系统因为具有特殊的客户端,所以访问用户的权限检测可以通过客户端实现或通过客户端+服务器检测实现,而B/S中,浏览器是每一台计算机都已具备的,如果不建立一个完整...
  • 一个java版本的基于角色的权限管理系统 可以用来做公共的cms后台 该版本支持多级菜单 部署方法 将 /src/main/resources/sql/jrbac.sql 数据库脚本运行在本地数据库 将 src/main/resources/jdbc.properties 中 ...
  • 基于java SSH角色权限管理系统源码+数据库 流畅运行,分享

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,854
精华内容 3,541
关键字:

java系统的权限

java 订阅