web登录与授权
web开发已经流行了很多年,登录与授权也基本有一套通用的流程,下面是我自己常用的登录与授权方式,欢迎大家讨论与吐槽.
概念:
登录是过程,授权是结果.登录只是为了获得页面的访问权限 or 操作权限 or 数据权限 or api调用权限.
登录授权分为两个域:用户域和权限域.
用户域:用户信息,角色信息。
用户信息:登录帐号,登录密码,用户名,角色,机构,部门等。
角色信息:角色名,机构,部门等。
权限域:模块信息,权限信息,角色权限。
模块信息:应用中的一个功能块,可以是一个页面(api),也可以是多个页面(api),拥有唯一标识。
权限信息:模块里的功能单元,比如增、删、改、查等。
角色权限:保存角色拥有的权限信息。
登录:
登录通常是用户输入账号、密码、验证码然后提交表单进行身份校验然后保存授权信息,现在还有扫码登录。
保存授权信息:
Cookie:把用户信息加密后保存在Cookie中。
Session:登录成功后在Cookie里保存SessionId和用户标识。
对比:
Cookie:
优点:不占服务器资源(Cpu资源除外,因为如果信息量大,解密过程很耗资源),使用方便。
缺点:容量有限且不安全。
Session:目前流行的是使用缓存数据库来充当Session服务,例如Redis和Memcache.
优点:
1、容量可根据需求无限拓展,可以很方便的建立独立的登录授权中心。
2、相较于Cookie,数据非常安全,SessionId是随机和易变的,只有SessionId对应的session信息和用户标识全匹配才算成功。
3、可以很方便拓展成独立的登录中心以实现统一登录。
缺点:过程稍微复杂。
授权:
授权发生在功能模块的入口处,流程如下。
1、获取用户的登录信息(from Cookie or Session)。
2、通过模块模块唯一标识和用户角色信息获取当前用户在当前模块的权限。
3、把用户当前模块的权限信息写入上下文(HttpContext)中(避免一个请求多次读取权限信息,后面的操作就可以直接从上下文中获取)
最新文章
- Android游戏开发实践(1)之NDK与JNI开发03
- Java多线程系列--“JUC线程池”02之 线程池原理(一)
- sed命令使用记录
- php异步调试和线上调试网站程序的方法
- Bootstrap-下拉框 Combobox
- 2.x ESL第二章习题 2.8
- 【Spring系列】spring mvc整合任务调度
- 【JVM虚拟机】(9)-- JVM是如何处理异常的
- css结构选择器组合使用,选择父元素中多个子元素中某一段元素
- [持续交付实践] pipeline使用:Shared Libraries
- 环同态p64推论
- 论文笔记:Show, Attend and Tell: Neural Image Caption Generation with Visual Attention
- C++ 作业 (循环链表构建队列)
- 组件基础(参数校验和动态组件、v-once)—Vue学习笔记
- ORA-01507: database not mounted
- python里的apply,applymap和map的区别
- package.json 文件中的版本号
- springmvc处理url请求步骤
- node nodemailer
- Java Web -- Servlet(5) 开发Servlet的三种方法、配置Servlet具体解释、Servlet的生命周期(2)