当前位置:首页 » 网页前端 » Web权限管理框架
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

Web权限管理框架

发布时间: 2023-04-15 15:28:00

A. 基于Bottle 封装一下自用web前后端分离开发框架(1):项目规划

因起初开举启始自己入门web的时候,是由以前我们的大牛主管来引导,非常感谢他一直以来的指导。接下来的系列文章主要是自己再这几天使用了flask之后,尝试继续使用Bottle封装成类似的那种来处理。

基于Bottle做一个简单后台权限管理系统,自用
系统是基于 https://github.com/wuyouzhuguli/FEBS-Vue 的前端源码上来做,后端就改成了我自己用bottle

关于环境安装等问题,在此也不再重复的叙述,其实网上也有大把的教程。

因为后续我们的很多的项目都依赖一个公共的基础库,而且相关的开发都是基于自由的基础库上进行开发,所以我个人的洗好,则是把相关的一些基础的放在同一个大项目文件夹下,这样也方便后续的其他微服务开发。

因为我个人的喜欢,还是喜欢把一些独立的东西放在独立的包下去管理。可能划分多也未必是好事,不过目前我基础库也不算是非常多,所有相关的包都是独立的。

相关的包的解析如下:

因为每个项目都是独立的,所以后续各自项目开发人员都负责自己的项目即可。相关基础库原则上,只需要新正乱如增相关其他方法,后续同步上不及时的问题,也不会因为某个人修改了基础库,导致某个项目异常等问题。

相关的包的解析如下:

因为个人喜欢问题,可能相关分包其实是有问题,过多的分包后期也陪薯许可能对管理来说可能会有点不好,不过,我个人喜欢的事一个独立的包处理独立的事,所以分包上,可能有点个人形式主义。

B. web安全框架有哪些

1、来自服务器厅档本身及网络环境的安全,这包括服务器系统漏洞,系统权限,网络环境(如ARP等)专、网属络端口管理等,这个是基础。
2、来自WEB服务器应用的安全,IIS或者Apache等,本身的配置、权限等,这个直接影响访问网扮卜乱站的效率和结果。
3、网站程序的安全,这可能程序漏洞,程序的权限审核,以及执行的效率,这个是WEB安全中占比例非常高的一部分。
4、WEB Server周边应用的安全,一台WEB服务器通常不是弊渣独立存在的,可能其它的应用服务器会影响到WEB服务器的安全,如数据库服务、FTP服务等。

C. web管理软件开发平台有什么

web就是网页模式开发平台,厂家相对比较多,有:天翎、易生云图、起步软件、流辰、道一普元、K2等;如需要选到适合的,就要从多个角度去呈现,譬如
这里您要看几个角度:
1、是不是具备国产花整合:天翎、流辰、道一、普元、
2、是否支持微服务:天翎、易生云图、起步软件、流辰、道一、普元、K2
3、是否支持容器部署:天翎、易生云图、道一、普元、K2
4、是否有专属的服务售后支持:天翎、易生云图、起步软件、流辰
5、语言是不是最新的主流的:天翎、起步软件、道一、轻流
6、兼容性如何:天翎、易生云图、起步软件、流辰、道一、普元、K2
7、是否提供平台源码:天翎、
8、是否不限制部署次数:天翎、普元、K2
9、是否具备中台价值:天翎、普元、K2
9、源码开放程度:天翎
存在即合理

D. 当前java web 开发用得一般都是哪些框架

1.S2SH(struts2+spring+hibernate)

基于Struts2+Spring3+Hibernate4开发java Web企业应用开源框架s2jh源码分享
spring+hibernate+struts2开发OA企业办公管理系统源码分享
Struts2+Hibernate3+Spring三大框架技术实现MySQL数据分页
Spring+struts2+hibernate+easyui基础权限管理框架
Spring+Struts2+Hibernate三大框架开发企业人力资源管理系统源代码下载
Spring mvc+struts2+Hibernate整合实例代码(注解详解)
2.S2SM(struts2+spring+mybatis)
Spring+Struts2+mybatis手动配置三大框架整合源代码下载
Struts2+mybatis开发音乐分享系统
3.SSH(spring mvc+spring+hibernate或struts+spring+hibernate)
Spring MVC+Spring+Hibrenarte实现的简单的CRUD项目实例
springMVC注解与hibernate完美结合完成基本的增删改查demo源码下载
springmvc+hibernate+spring+easyui开发bsalse进销存后台管理系统源代码下载
spring 3.0+spring MVC+Hibernate框架搭建教程(附:springMVC文件上传功能)
spring+struts2+Hibernate三大框架开发某制药厂管理系统源代码下载
Spring mvc+struts2+Hibernate整合实例代码(注解详解)
4.SSM(spring mvc+spring+mybatis)
SpringMVC+Mybatis整合实现简单权限控制系统代码

E. JAVAweb开发现在主流的权限控制框架有哪些哪个最好用

1.最基础的方法——权限五张表 用户 用户角色 角色 角色权限 权限
2.apache shiro 优点 apache开源、接入简单
3.Spring Security 一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,优点功能完备,缺点 上手难度较大

F. 关于java web分配权限,有用户表,祖表,角色表,菜单,按钮 求权限的分配,希望各位大侠的指点

权限分配要看你自己设置什么样的用户,能拥有什么权限,如:管理员能浏览所有的页面,能进行增删查改,普通用户只能浏览公开的页面,只能查看,和修改等。
数据库表设计方面,建议你增加一张权限表,
权限表和用户表建立关系,
例如:001代表用户表中管理员的编号,002代表普通用户
===============================================
user_id access
0001 增加
0001 修改
0001 删除
0001 查看
0002 查看
0002 增加
.........
还有很多你可以自己加,总之你在需要做设置权限的地方,每次操作之前你都要先查下这张表,看当前用户是否有权限进行操作。。

G. Web 系统中用户 权限之间的关系 是一对多 还是 多对多 他们之间有联系吗

前言:

权限往往是一个极其复杂的问题,但也可简单表述为这样的逻辑表达式:判断“who对what(which)进行how的操作”的逻辑表达式是否为真。针对不同的应用,需要根据项目的实际情况和具体架构,在维护性、灵活性、完整性等n多个方案之间比较权衡,选择符合的方案。

目标:

直观,因为系统最终会由最终用户来维护,权限分配的直观和容易理解,显得比较重要,系统不辞劳苦的实现了组的继承,除了功能的必须,更主要的就是因为它足够直观。

简单,包括概念数量上的简单和意义上的简单还有功能上的简单。想用一个权限系统解决所有的权限问题是不现实的。设计中将常常变化的“定制”特点比较强的部分判断为业务逻辑,而将常常相同的“通用”特点比较强的部分判断为权限逻辑就是基于这样的思路。

扩展,采用可继承在扩展上的困难。的group概念在支持权限以组方式定义的同时有效避免了重定义时

现状:

对于在企业环境中的访问控制方法,一般有三种:

1.自主型访问控制方法。目前在我国的大多数的信息系统中的访问控制模块中基本是借助于自主型访问控制方法中的访问控制列表(acls)。

2.强制型访问控制方法。用于多层次安全级别的军事应用。

3.基于角色的访问控制方法(rbac)。是目前公认的解决大型企业的统一资源访问控制的有效方法。其显着的两大特征是:1.减小授权管理的复杂性,降低管理开销。2.灵活地支持企业的安全策略,并对企业的变化有很大的伸缩性。

名词:

粗粒度:表示类别级,即仅考虑对象的类别(the type of object),不考虑对象的某个特

定实例。比如,用户管理中,创建、删除,对所有的用户都一视同仁,并不区分操作的具体对象实例。

细粒度:表示实例级,即需要考虑具体对象的实例(the instance of object),当然,细

粒度是在考虑粗粒度的对象类别之后才再考虑特定实例。比如,合同管理中,列表、删除,需要区分该合同实例是否为当前用户所创建。

原则:

权限逻辑配合业务逻辑。即权限系统以为业务逻辑提供服务为目标。相当多细粒度的权限问题因其极其独特而不具通用意义,它们也能被理解为是“业务逻辑”的一部分。比如,要求:“合同资源只能被它的创建者删除,与创建者同组的用户可以修改,所有的用户能够浏览”。这既可以认为是一个细粒度的权限问题,也可以认为是一个业务逻辑问题。在这里它是业务逻辑问题,在整个权限系统的架构设计之中不予过多考虑。当然,权限系统的架构也必须要能支持这样的控制判断。或者说,系统提供足够多但不是完全的控制能力。即,设计原则归结为:“系统只提供粗粒度的权限,细粒度的权限被认为是业务逻辑的职责”。

需要再次强调的是,这里表述的权限系统仅是一个“不完全”的权限系统,即,它不提供所有关于权限的问题的解决方法。它提供一个基础,并解决那些具有“共性”的(或者说粗粒度的)部分。在这个基础之上,根据“业务逻辑”的独特权限需求,编码实现剩余部分(或者说细粒度的)部分,才算完整。回到权限的问题公式,通用的设计仅解决了who+what+how 的问题,其他的权限问题留给业务逻辑解决。

概念:

who:权限的拥用者或主体(principal、user、group、role、actor等等)

what:权限针对的对象或资源(resource、class)。

how:具体的权限(privilege, 正向授权与负向授权)。

role:是角色,拥有一定数量的权限。

operator:操作。表明对what的how 操作。

说明:

user:与 role 相关,用户仅仅是纯粹的用户,权限是被分离出去了的。user是不能与 privilege 直接相关的,user 要拥有对某种资源的权限,必须通过role去关联。解决 who 的问题。

resource:就是系统的资源,比如部门新闻,文档等各种可以被提供给用户访问的对象。资源可以反向包含自身,即树状结构,每一个资源节点可以与若干指定权限类别相关可定义是否将其权限应用于子节点。

privilege:是resource related的权限。就是指,这个权限是绑定在特定的资源实例上的。比如说部门新闻的发布权限,叫做"部门新闻发布权限"。这就表明,该privilege是一个发布权限,而且是针对部门新闻这种资源的一种发布权限。privilege是由creator在做开发时就确定的。权限,包括系统定义权限和用户自定义权限用户自定义权限之间可以指定排斥和包含关系(如:读取,修改,管理三个权限,管理 权限 包含 前两种权限)。privilege 如"删除" 是一个抽象的名词,当它不与任何具体的 object 或 resource 绑定在一起时是没有任何意义的。拿新闻发布来说,发布是一种权限,但是只说发布它是毫无意义的。因为不知道发布可以操作的对象是什么。只有当发布与新闻结合在一起时,才会产生真正的 privilege。这就是 privilege instance。权限系统根据需求的不同可以延伸生很多不同的版本。

role:是粗粒度和细粒度(业务逻辑)的接口,一个基于粗粒度控制的权限框架软件,对外的接口应该是role,具体业务实现可以直接继承或拓展丰富role的内容,role不是如同user或group的具体实体,它是接口概念,抽象的通称。

group:用户组,权限分配的单位与载体。权限不考虑分配给特定的用户。组可以包括组(以实现权限的继承)。组可以包含用户,组内用户继承组的权限。group要实现继承。即在创建时必须要指定该group的parent是什么group。在粗粒度控制上,可以认为,只要某用户直接或者间接的属于某个group那么它就具备这个group的所有操作许可。细粒度控制上,在业务逻辑的判断中,user仅应关注其直接属于的group,用来判断是否“同组” 。group是可继承的,对于一个分级的权限实现,某个group通过“继承”就已经直接获得了其父group所拥有的所有“权限集合”,对这个group而言,需要与权限建立直接关联的,仅是它比起其父group需要“扩展”的那部分权限。子组继承父组的所有权限,规则来得更简单,同时意味着管理更容易。为了更进一步实现权限的继承,最直接的就是在group上引入“父子关系”。

user与group是多对多的关系。即一个user可以属于多个group之中,一个group可以包括多个user。子group与父group是多对一的关系。operator某种意义上类似于resource + privilege概念,但这里的resource仅包括resource type不表示resource instance。group 可以直接映射组织结构,role 可以直接映射组织结构中的业务角色,比较直观,而且也足够灵活。role对系统的贡献实质上就是提供了一个比较粗颗粒的分配单位。

group与operator是多对多的关系。各概念的关系图示如下:

解释:

operator的定义包括了resource type和method概念。即,what和how的概念。之所以将what和how绑定在一起作为一个operator概念而不是分开建模再建立关联,这是因为很多的how对于某what才有意义。比如,发布操作对新闻对象才有意义,对用户对象则没有意义。

how本身的意义也有所不同,具体来说,对于每一个what可以定义n种操作。比如,对于合同这类对象,可以定义创建操作、提交操作、检查冲突操作等。可以认为,how概念对应于每一个商业方法。其中,与具体用户身份相关的操作既可以定义在操作的业务逻辑之中,也可以定义在操作级别。比如,创建者的浏览视图与普通用户的浏览视图要求内容不同。既可以在外部定义两个操作方法,也可以在一个操作方法的内部根据具体逻辑进行处理。具体应用哪一种方式应依据实际情况进行处理。

这样的架构,应能在易于理解和管理的情况下,满足绝大部分粗粒度权限控制的功能需要。但是除了粗粒度权限,系统中必然还会包括无数对具体instance的细粒度权限。这些问题,被留给业务逻辑来解决,这样的考虑基于以下两点:

一方面,细粒度的权限判断必须要在资源上建模权限分配的支持信息才可能得以实现。比如,如果要求创建者和普通用户看到不同的信息内容,那么,资源本身应该有其创建者的信息。另一方面,细粒度的权限常常具有相当大的业务逻辑相关性。对不同的业务逻辑,常常意味着完全不同的权限判定原则和策略。相比之下,粗粒度的权限更具通用性,将其实现为一个架构,更有重用价值;而将细粒度的权限判断实现为一个架构级别的东西就显得繁琐,而且不是那么的有必要,用定制的代码来实现就更简洁,更灵活。

所以细粒度控制应该在底层解决,resource在实例化的时候,必需指定owner和groupprivilege在对resource进行操作时也必然会确定约束类型:究竟是ownerok还是groupok还是allok。group应和role严格分离user和group是多对多的关系,group只用于对用户分类,不包含任何role的意义;role只授予user,而不是group。如果用户需要还没有的多种privilege的组合,必须新增role。privilege必须能够访问resource,同时带user参数,这样权限控制就完备了。

思想:

权限系统的核心由以下三部分构成:1.创造权限,2.分配权限,3.使用权限,然后,系统各部分的主要参与者对照如下:1.创造权限 - creator创造,2.分配权限 - administrator 分配,3.使用权限 - user:

1. creator 创造 privilege, creator 在设计和实现系统时会划分,一个子系统或称为模块,应该有哪些权限。这里完成的是 privilege 与 resource 的对象声明,并没有真正将 privilege 与具体resource 实例联系在一起,形成operator。

2. administrator 指定 privilege 与 resource instance 的关联。在这一步, 权限真正与资源实例联系到了一起, 产生了operator(privilege instance)。administrator利用operator这个基本元素,来创造他理想中的权限模型。如,创建角色,创建用户组,给用户组分配用户,将用户组与角色关联等等...这些操作都是由 administrator 来完成的。

3. user 使用 administrator 分配给的权限去使用各个子系统。administrator 是用户,在他的心目中有一个比较适合他管理和维护的权限模型。于是,程序员只要回答一个问题,就是什么权限可以访问什么资源,也就是前面说的 operator。程序员提供 operator 就意味着给系统穿上了盔甲。administrator 就可以按照他的意愿来建立他所希望的权限框架可以自行增加,删除,管理resource和privilege之间关系。可以自行设定用户user和角色role的对应关系。(如果将 creator看作是 basic 的发明者, administrator 就是 basic 的使用者,他可以做一些脚本式的编程) operator是这个系统中最关键的部分,它是一个纽带,一个系在programmer,administrator,user之间的纽带。

用一个功能模块来举例子。

一.建立角色功能并做分配:

1.如果现在要做一个员工管理的模块(即resources),这个模块有三个功能,分别是:增加,修改,删除。给这三个功能各自分配一个id,这个id叫做功能代号:

emp_addemp,emp_deleteemp,emp_updateemp。

2.建立一个角色(role),把上面的功能代码加到这个角色拥有的权限中,并保存到数据库中。角色包括系统管理员,测试人员等。

3.建立一个员工的账号,并把一种或几种角色赋给这个员工。比如说这个员工既可以是公司管理人员,也可以是测试人员等。这样他登录到系统中将会只看到他拥有权限的那些模块。

二.把身份信息加到session中。

登录时,先到数据库中查找是否存在这个员工,如果存在,再根据员工的sn查找员工的权限信息,把员工所有的权限信息都入到一个hashmap中,比如就把上面的emp_addemp等放到这个hashmap中。然后把hashmap保存在一个userinfobean中。最后把这个userinfobean放到session中,这样在整个程序的运行过程中,系统随时都可以取得这个用户的身份信息。

三.根据用户的权限做出不同的显示。

可以对比当前员工的权限和给这个菜单分配的“功能id”判断当前用户是否有打开这个菜单的权限。例如:如果保存员工权限的hashmap中没有这三个id的任何一个,那这个菜单就不会显示,如果员工的hashmap中有任何一个id,那这个菜单都会显示。

对于一个新闻系统(resouce),假设它有这样的功能(privilege):查看,发布,删除,修改;假设对于删除,有"新闻系统管理者只能删除一月前发布的,而超级管理员可删除所有的这样的限制,这属于业务逻辑(business logic),而不属于用户权限范围。也就是说权限负责有没有删除的permission,至于能删除哪些内容应该根据userrole or usergroup来决定(当然给userrole or usergroup分配权限时就应该包含上面两条业务逻辑)。

一个用户可以拥有多种角色,但同一时刻用户只能用一种角色进入系统。角色的划分方法可以根据实际情况划分,按部门或机构进行划分的,至于角色拥有多少权限,这就看系统管理员赋给他多少的权限了。用户—角色—权限的关键是角色。用户登录时是以用户和角色两种属性进行登录的(因为一个用户可以拥有多种角色,但同一时刻只能扮演一种角色),根据角色得到用户的权限,登录后进行初始化。这其中的技巧是同一时刻某一用户只能用一种角色进行登录。

针对不同的“角色”动态的建立不同的组,每个项目建立一个单独的group,对于新的项目,建立新的 group 即可。在权限判断部分,应在商业方法上予以控制。比如:不同用户的“操作能力”是不同的(粗粒度的控制应能满足要求),不同用户的“可视区域”是不同的(体现在对被操作的对象的权限数据,是否允许当前用户访问,这需要对业务数据建模的时候考虑权限控制需要)。

扩展性:

有了用户/权限管理的基本框架,who(user/group)的概念是不会经常需要扩展的。变化的可能是系统中引入新的 what (新的resource类型)或者新的how(新的操作方式)。那在三个基本概念中,仅在permission上进行扩展是不够的。这样的设计中permission实质上解决了how 的问题,即表示了“怎样”的操作。那么这个“怎样”是在哪一个层次上的定义呢?将permission定义在“商业方法”级别比较合适。比如,发布、购买、取消。每一个商业方法可以意味着用户进行的一个“动作”。定义在商业逻辑的层次上,一方面保证了数据访问代码的“纯洁性”,另一方面在功能上也是“足够”的。也就是说,对更低层次,能自由的访问数据,对更高层次,也能比较精细的控制权限。

确定了permission定义的合适层次,更进一步,能够发现permission实际上还隐含了what的概念。也就是说,对于what的how操作才会是一个完整的operator。比如,“发布”操作,隐含了“信息”的“发布”概念,而对于“商品”而言发布操作是没有意义的。同样的,“购买”操作,隐含了“商品”的“购买”概念。这里的绑定还体现在大量通用的同名的操作上,比如,需要区分“商品的删除”与“信息的删除”这两个同名为“删除”的不同操作。

提供权限系统的扩展能力是在operator (resource + permission)的概念上进行扩展。proxy 模式是一个非常合适的实现方式。实现大致如下:在业务逻辑层(ejb session facade [stateful sessionbean]中),取得该商业方法的methodname,再根据classname和 methodname 检索operator 数据,然后依据这个operator信息和stateful中保存的user信息判断当前用户是否具备该方法的操作权限。

应用在 ejb 模式下,可以定义一个很明确的 business层次,而一个business 可能意味着不同的视图,当多个视图都对应于一个业务逻辑的时候,比如,swing client以及 jsp client 访问的是同一个 ejb 实现的 business。在 business 层上应用权限较能提供集中的控制能力。实际上,如果权限系统提供了查询能力,那么会发现,在视图层次已经可以不去理解权限,它只需要根据查询结果控制界面就可以了。

灵活性:

group和role,只是一种辅助实现的手段,不是必需的。如果系统的role很多,逐个授权违背了“简单,方便”的目的,那就引入group,将权限相同的role组成一个group进行集中授权。role也一样,是某一类operator的集合,是为了简化针对多个operator的操作。

role把具体的用户和组从权限中解放出来。一个用户可以承担不同的角色,从而实现授权的灵活性。当然,group也可以实现类似的功能。但实际业务中,group划分多以行政组织结构或业务功能划分;如果为了权限管理强行将一个用户加入不同的组,会导致管理的复杂性。

domain的应用。为了授权更灵活,可以将where或者scope抽象出来,称之为domain,真正的授权是在domain的范围内进行,具体的resource将分属于不同的domain。比如:一个新闻机构有国内与国外两大分支,两大分支内又都有不同的资源(体育类、生活类、时事政治类)。假如所有国内新闻的权限规则都是一样的,所有国外新闻的权限规则也相同。则可以建立两个域,分别授权,然后只要将各类新闻与不同的域关联,受域上的权限控制,从而使之简化。

权限系统还应该考虑将功能性的授权与资源性的授权分开。很多系统都只有对系统中的数据(资源)的维护有权限控制,但没有对系统功能的权限控制。

权限系统最好是可以分层管理而不是集中管理。大多客户希望不同的部门能且仅能管理其部门内部的事务,而不是什么都需要一个集中的administrator或administrators组来管理。虽然你可以将不同部门的人都加入administrators组,但他们的权限过大,可以管理整个系统资源而不是该部门资源。

正向授权与负向授权:正向授权在开始时假定主体没有任何权限,然后根据需要授予权限,适合于权限要求严格的系统。负向授权在开始时假定主体有所有权限,然后将某些特殊权限收回。

权限计算策略:系统中user,group,role都可以授权,权限可以有正负向之分,在计算用户的净权限时定义一套策略。

系统中应该有一个集中管理权限的accessservice,负责权限的维护(业务管理员、安全管理模块)与使用(最终用户、各功能模块),该accessservice在实现时要同时考虑一般权限与特殊权限。虽然在具体实现上可以有很多,比如用proxy模式,但应该使这些proxy依赖于accessservice。各模块功能中调用accessservice来检查是否有相应的权限。所以说,权限管理不是安全管理模块自己一个人的事情,而是与系统各功能模块都有关系。每个功能模块的开发人员都应该熟悉安全管理模块,当然,也要从业务上熟悉本模块的安全规则。

技术实现:

1.表单式认证,这是常用的,但用户到达一个不被授权访问的资源时,web容器就发

出一个html页面,要求输入用户名和密码。

2.一个基于servlet sign in/sign out来集中处理所有的request,缺点是必须由应用程序自己来处理。

3.用filter防止用户访问一些未被授权的资源,filter会截取所有request/response,

然后放置一个验证通过的标识在用户的session中,然后filter每次依靠这个标识来决定是否放行response。

这个模式分为:

gatekeeper :采取filter或统一servlet的方式。

authenticator: 在web中使用jaas自己来实现。

用户资格存储ldap或数据库:

1. gatekeeper拦截检查每个到达受保护的资源。首先检查这个用户是否有已经创建

好的login session,如果没有,gatekeeper 检查是否有一个全局的和authenticator相关的session?

2. 如果没有全局的session,这个用户被导向到authenticator的sign-on 页面,

要求提供用户名和密码。

3. authenticator接受用户名和密码,通过用户的资格系统验证用户。

4. 如果验证成功,authenticator将创建一个全局login session,并且导向gatekeeper

来为这个用户在他的web应用中创建一个login session。

5. authenticator和gatekeepers联合分享cookie,或者使用tokens在query字符里

H. 一般我们做Javaweb项目如果要做权限管理模块的话都需要用后台框架,如果用原生的servlet应该怎么做呢

用Filter搞。配置一个过滤器先,做一个权限表再,权限依据为每项功能的url和用户/用户组,用户请求结合session和当前的url,来决定是否放行功能。如此一来,简单的权限需求已经可以适应了。、

http://www.oschina.net/question/222919_61496

I. 基于sso的web系统怎么实现权限管理

单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所有系统的信任。单点登录在大型网站里使用得非常频繁,例如像阿里巴巴这样的网站,在网站的背后是成百上千的子系统,用户一次操作或交易可能涉及到几十个子系统的协作,如果每个子系统都需要用户认证,不仅用户会疯掉,各子系统也会为这种重复认证授权的逻辑搞疯掉。实现单点登录说到底就是要解决如何产生和存储那个信任,再就是其他系统如何验证这个信任的有效性,因此要点也就以下几个: 存储信任 验证信任 只要解决了以上的问题,达到了开头讲得效果就可以说是SSO。最简单实现SSO的方法就是用Cookie,实现流程如下所示: 常用的两种web单点登录SSO的实现原理X 不然发现以上的方案是把信任存储在客户端的Cookie里,这种方法虽然实现方便但立马会让人质疑两个问题: Cookie不安全 不能跨域免登 对于第一个问题一般都是通过加密Cookie来处理,第二个问题是硬伤,其实这种方案的思路的就是要把这个信任关系存储在客户端,要实现这个也不一定只能用Cookie,用flash也能解决,flash的Shared Object API就提供了存储能力。 一般说来,大型系统会采取在服务端存储信任关系的做法,实现流程如下所示: 常用的两种web单点登录SSO的实现原理 以上方案就是要把信任关系存储在单独的 SSO系统(暂且这么称呼它)里,说起来只是简单地从客户端移到了服务端,但其中几个问题需要重点解决: 如何高效存储大量临时性的信任数据 如何防止信息传递过程被篡改 如何让SSO系统信任登录系统和免登系统 对于第一个问题,一般可以采用类似与memcached的分布式缓存的方案, 既能提供可扩展数据量的机制,也能提供高效访问。对于第二个问题,一般采取数字签名的方法,要么通过数字证书签名,要么通过像md5的方式,这就需要SSO系统返回免登URL的时候对需验证的参数进行md5加密,并带上token一起返回,最后需免登的系统进行验证信任关系的时候,需把这个token传给SSO系统,SSO系统通过对token的验证就可以辨别信息是否被改过。对于最后一个问题,可以通过白名单来处理,说简单点只有在白名单上的系统才能请求生产信任关系,同理只有在白名单上的系统才能被免登录。 通过第二种方案的演变,可以使用发放票据的方式实现websso登录: 常用的两种web单点登录SSO的实现原理 通过第三种方式,客户端只做票据的发放和获取,不涉及用户信息传输,用户信息均可交给子系统和SSO系统之间处理,更有效保护用户隐私。 以上只是提供了些简单的实现技术,但需要强调的是这只是技术实现而已,仅仅是为了解决上面谈到的一些问题,SSO本身来说并不是什么高科技,有了这个认识比较有利于我们深入探索SSO

J. javaweb 项目的系统权限管理,怎么设计

按你说的设计可以啊,设置角色,给用户分配角色,角色控制菜单显示,最好做一个后台可以编辑角色,那样方便很多