Shiro之用户授权
学习笔记 : 详解Shiro的用户授权简介 : 授权,也叫访问控制,即在应用中控制谁能访问哪些资源(如访问页面/编辑数据/页面操作等). 在授权中需了解的几个关键对象 : 主体(Subject)、资源(Resource)、权限(Permission)、角色(Role),其解析如下所示 :
主体 : 主体,即访问应用的用户,在Shiro中使用Subject代表该用户. 用户只有授权后才允许访问相应的资源
资源 : 在应用中用户可以访问的任何资源,比如访问JSP页面、查看/编辑某些数据、访问某个业务方法、打印文本等等..用户需要授权后方可访问
权限 : 安全策略中的原子授权单位,可用权限控制用户在应用中是否能访问某个资源,如访问用户列表页面,查看/新增/修改/删除用户数据(基本为CRUD式权限控制)..
角色 : 角色代表了操作集合,可以理解为权限的集合,一般情况下我们会赋予用户角色而不是权限,即这样用户可以拥有一组权限,不同的角色拥有一组不同的权限
隐式角色 : 即直接通过角色来验证用户有没有操作权限,即粒度是以角色为单位进行访问控制的,粒度较粗. 若进行变更可能需要多处代码的 ...
Shiro之自定义realm及其加密
学习笔记 : Shiro之自定义realm及其加密自定义RealmRealm : 域,Shiro从Realm获取安全数据(如用户、角色、权限),就是说SecurityManager要验证用户身份,那么它需要从Realm获取相应的用户进行比较以确定用户身份是否合法. 也需要从Realm得到用户相应的角色 / 权限进行验证用户是否能进行操作,可以把Realm看成 DataSource,即安全数据源. 如我们之前的ini配置方式使用的是org.apache.shiro.realm.text.IniRealm接口
org.apache.shiro.realm.Realm接口如下所示 :
123456//返回一个唯一的Realm名字String getName(); //判断此Realm是否支持此Tokenboolean supports(AuthenticationToken token); //根据Token获取认证信息AuthenticationInfo getAuthenticationInfo(AuthenticationToken token) throws Authenticat ...
详解Shiro登录登出的操作流程
学习笔记 : 详解Shiro登录登出的操作流程在shiro中,用户需要提供principals(身份)和credentials(证明)给shiro,继而来验证用户的身份信息,最常见的princpals和 credentials组合就是用户名 / 密码啦~
principals : 身份,即主体的标识属性,如用户名、邮箱等,需唯一. 一个主体可以有多个principals,但只有一个Primary principals,一般是用户名 / 密码 / 手机号
credentials : 证明 / 凭证,即只有主体知道的安全值,如密码 / 数字证书等
登录登出案例接下来通过一个模拟验证用户登录信息的示例程序,来探究并分析一下Shiro的验证用户身份信息的流程
pom.xml : Maven依赖
123456789101112131415161718192021<dependencies> <!--Junit 单元测试 --> <dependency> <groupId>junit</groupId> ...
Hi Shiro ~
学习笔记 : 初识Shiro ~简介 : Apache Shiro是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理等功能,对于任何一个应用程序,Shiro都可以提供全面的安全管理服务
权限管理包括用户身份认证和授权两个部分,简称认证授权
身份认证 : 为判断用户是否为合法用户的过程,最常用的身份认证方式就是系统通过核对用户输入的用户名和口令,将其与系统中存储的该用户信息相对比,继而来判断用户身份是否正确
授权 : 既访问权限,控制用户访问资源的权限. 主体(subject)进行身份认证后需要分配权限方可访问系统的资源
架构解析Shiro可以非常容易的开发出足够好的应用,其不仅可以用在JavaSE环境,也可以用在JavaEE环境. Shiro可以帮助我们完成 : 认证、授权、加密、会话管理、与Web集成、缓存等. 其基本功能点及其解析如下所示 :
Authentication : 身份认证 / 登录,验证用户是不是拥有相应的身份
Authorization : 授权,即权限验证,验证某个已认证的用户是否拥有某个权限. 即判断用户是否能做事情,常见的如 : 验证某 ...
How to create a pull request from a fork
学习笔记 : 如何在fork的仓库中创建一个pull request请求如果你创建了仓库的分叉并对分叉进行了更改,你可以创建一个拉取请求来请求上游仓库接受你的更改. 至于说如何正确使用分支请参阅官方文档 : https://help.github.com/en/articles/working-with-forks
详细步骤
导航到从其中创建分叉的原始仓库
在Branch(分支)菜单的右侧,单击New pull request(新建拉取请求)
在Compare (比较)页面上,单击compare across forks(跨分叉比较)
确认基本分叉是您要向其合并更改的仓库. 使用base branch(基本分支)下拉菜单,选择要向其合并更改的上游仓库分支
使用head fork(头部分叉)下拉菜单选择您的分叉,然后使用compare branch(比较分支)下拉菜单选择进行了更改的分支
键入拉取请求的标题和说明
如果您不希望对上游仓库具有推送权限的任何人更改您的拉取请求,请取消选中Allow edits from maintainers(允许维护员编辑 ...
A simple comment component for Vue
案例笔记 : 一个简单的Vue评论框组件在写完案例 : 一个基于Vue.js的简单信息管理页后,小哥又初步学习了Vue.js组件的定义及基本用法,来为此再写一个小总结案例吧~ 这是一个简单的评论框组件 : 发表评论(将其存储到Local Storage)~ 该程序其它版本见 : https://github.com/YUbuntu0109/vue-learning
(simple component for comment v1.0/comment-component-1.0.html)程序如下所示 :
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711 ...
一个基于Vue的简单信息管理页
案例笔记 : 一个基于Vue.js的简单信息管理页初步学习完Vue.js的基本语法、数据绑定视图机制、事件绑定、自定义指令、过滤器后,来尝试写一个总结案例吧~ 该案例的主要功能是一个简单的信息管理 : 增加,删除,查找. 该程序其它版本见 : https://github.com/YUbuntu0109/vue-learning
(simple demo program v1.2/demo-1.2.html)程序如下所示 :
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 ...
Vue组件的定义及基本用法
学习笔记 : Vue组件的定义及基本的使用方法组件的出现,是为了拆分实例的代码量的,继而能够让我们以不同的组件来划分不同功能模块. 组件是可复用的Vue实例,所以它们与new Vue接收相同的选项,例如 data、computed、watch、methods以及生命周期钩子等 ..
组件化 : 从代码逻辑的角度进行划分,保证每个功能模块的职能单一
模块化 : 从UI设计的角度进行划分,保证前端方便UI组件的重用
组件的注册全局组件注册方式方式一 : 使用Vue.extend,及其简化模式
123456789101112131415161718192021222324252627<div id="app"> <my-component></my-component> <simple-my-component1></simple-my-component1> <simple-my-component2></simple-my-component2></div><sc ...
Vue.js的自定义指令与过滤器
学习笔记 : Vue的自定义指令及过滤器的使用指令先前我们接触过Vue提供的’开箱即用的’指令,如v-bind,v-on,v-model等 . .除了这些指令外,Vue也允许我们使用一些自定义的指令哟~ 一个指令定义对象可以提供如下几个钩子函数 (均为可选) :
bind : 只调用一次,指令第一次绑定到元素时调用. 在这里可以进行一次性的初始化设置
inserted : 被绑定元素插入父节点时调用(仅保证父节点存在,但不一定已被插入文档中)
update : 所在组件的VNode更新时调用,但是可能发生在其子VNode更新之前. 指令的值可能发生了改变,也可能没有. 但是你可以通过比较更新前后的值来忽略不必要的模板更新 (详细的钩子函数参数见 : https://cn.vuejs.org/v2/guide/custom-directive.html)
componentUpdated : 指令所在组件的VNode及其子VNode全部更新后调用
unbind : 只调用一次,指令与元素解绑时调用
自定义全局指令自定义一个全局的指令,用于自定义字体颜色,示例程序如下 :
123456 ...
Vue.js的数据响应式原理
学习笔记 : Vue.js对的数据响应式原理简介 : Vue中最重要的概念就是响应式数据,一方面是指衍生和元数据之间的响应,通过数据链来实现. 另一方面是指视图与数据之间的绑定 .
初始数据链数据链在学术上被定义为连通数据的链路,在这条链路上有一到多个数据起点(元数据),并通过改点不断衍生扩展新的节点(衍生数据),形成 一个庞大的网状结构. 当你修改数据起点时, 所有存在网上的节点值都将会同步更新,如下图所示 :
Vue中的数据链Vue实例提供了computed计算属性选项,以供开发者生成衍生数据对象. 虽然计算属性以函数形式声明,却并不接受参数,也只能以属性的方式调用. 由于计算属性的this指向Vue实例,所以它可以获取实例上所有已挂载的可见属性,如下示例此程序 :
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859<!DOCTYPE html><html> <head> ...