shiro基础学习(三)—shiro授权】的更多相关文章

一.入门程序 1.授权流程        2.授权的三种方式 (1)编程式: 通过写if/else 授权代码块完成. Subject subject = SecurityUtils.getSubject(); if(subject.hasRole("admin")) {      //有权限 } else {      //无权限 } (2)注解式: 通过在执行的Java方法上放置相应的注解完成. @RequiresRoles("admin") public voi…
一.认证 1.配置web.xml   2.配置applicationContext.xml      在applicationContext.xml中配置一个bean,ID和上面的过滤器的名称一致.           securityManager: 这个属性是必须的. loginUrl: 没有登录的用户请求需要登录的页面时自动跳转到登录页面,不是必须的属性,不输入地址的话会自动寻找项目web项目的根目录下的"/login.jsp"页面. successUrl: 登录成功默认跳转页面…
一.shiro简介      shiro是apache旗下一个开源框架,它将软件系统的安全认证相关的功能抽取出来,实现用户身份认证.权限授权.加密.会话管理等功能,组成了一个通用的安全认证框架. 以下是你可以用 Apache Shiro所做的事情: (1)验证用户. (2)对用户执行访问控制,如: 判断用户是否拥有角色admin,判断用户是否拥有访问的权限. (3)在任何环境下使用Session API.例如CS程序. (4)可以使用多个用户数据源.例如一个是oracle用户库,另外一个是mys…
Shiro:学习笔记(2)——授权 Shiro的三种授权方式 编程式: Subject subject = SecurityUtils.getSubject(); if(subject.hasRole(“admin”)) { //有权限 } else { //无权限 } 注解式: @RequiresRoles("admin") public void hello() { //有权限 } 说明:没有权限将抛出相应的异常 JSP标签: <shiro:hasRole name=&quo…
Shiro笔记(三)授权 一.授权方式 1.编程式: Subject subject=SecurityUtils.getSubject(); if(subject.hasRole("root")){ //有权限 } else { //无权限 } 2.注解式: @RequiresRoles("admin") public void hello(){ //有权限才执行 } 3.JSP标签: <shiro:hasRole name="root"&…
Python入门基础学习 三 数据类型 Python区分整型和浮点型依靠的是小数点,有小数点就是浮点型. e记法:e就是10的意思,是一种科学的计数法,15000=1.5e4 布尔类型是一种特殊的整形,true就相当于1,false相当于0,可以用来计算 类型转换 转换:整数:int();字符串:str();浮点数:float() 转换例子:(图9) 如果用内置函数当变量名,比如str=123,一旦被赋值,再使用这个函数会被报错. type()函数可以明确告诉我们变量类型. isinstance…
Python基础学习三 1.列表与元组 len()函数:可以获取列表的元素个数. append()函数:用于在列表的最后添加元素. sort()函数:用于排序元素 insert()函数:用于在指定位置添加元素. list=['1','2','3','4'] list.insert(1,5) #在索引为1处添加元素5 pop()函数:删除指定索引的元素,空填时默认最后一位. 元组的元素不能被修改.在单元素元组的定义中,需要在元素后添加英文逗号 t=(1,) 元组不可变,但是若其元素有列表等,可以通…
今天主要来学习一下Django的路由系统,视频中只学了一些皮毛,但是也做下总结,主要分为静态路由.动态路由.二级路由 一.先来看下静态路由 1.需要在project中的urls文件中做配置,然后将匹配到的urls转发到对应app的views的函数中 2.在对应的app的views中配置相应的函数 3.这个时候我们通过浏览器访问这个url,就可以得到如下的结果 ok.至此,静态路由我们就学习完了,下面我们开始学习动态路由 二.动态路由的学习,动态路由的学习主要是用到了python的正则表达式,我们…
一.基本概念 1.权限管理      只要有用户参与的系统一般都要有权限管理,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源.     权限管理包括用户认证和授权两部分.   2.用户认证     用户认证,用户去访问系统,系统要验证用户身份的合法性. 最常用的用户身份验证的方法: (1)用户名密码方式 (2)指纹打卡机. (3)基于证书验证方法. 系统验证用户身份合法,用户方可访问系统的资源. (1)用户认证的流程        (2)关…
一.理解面向对象       面向对象是一种思想,是基于面向过程而言的,就是说面向对象是将功能等通过对象来实现,将功能封装进对象之中,让对象去实现具体的细节:这种思想是将数据作为第一位,而方法或者说是算法作为其次,这是对数据一种优化,操作起来更加的方便,简化了过程.      面向对象的三大特征: 封装性.继承性.多态性.      封装性: 隐藏了对象的属性和实现细节,仅对外提供公共的访问方式,提高了代码的复用性和安全性.      继承性: 两种事物之间存在一定的所属关系,那么继承的类可以从…
在salesforce的classic中,我们使用{!expresion}在前台页面展示信息,在lightning中,上一篇我们也提及了,如果展示attribute的值,可以使用{!v.expresion}展示信息. lightning在component中解析动态值的时候,会将{!} 这个里面的变量进行动态的解析以及展示.当然这个变量可以是基础类型,自定义类型,数组集合等等,当然如果表达式为空字符串或者是空格则不会解析.偶尔特殊的要求为需要输出'{!}'这个字符串,官方文档说可以使用<aura…
Java的volatile关键字在JDK源码中经常出现,但是对它的认识只是停留在共享变量上,今天来谈谈volatile关键字. volatile,从字面上说是易变的.不稳定的,事实上,也确实如此,这个关键字的作用就是告诉编译器,只要是被此关键字修饰的变量都是易变的.不稳定的.那为什么是易变的呢?因为volatile所修饰的变量是直接存在于主内存中的,线程对变量的操作也是直接反映在主内存中,所以说其是易变的. 一.Java内存模型 Java内存模型规定所有的变量都是存在主存当中(类似于前面说的物理…
Oracle 四个表的 emp dept  salgrade  bunus 的结构,记住有利于后期SQL语句的学习 雇员表(emp) No. 字段 类型 描述 1 empno NUMBER(4) 表示雇员编号,是唯一的 2 ENAME VARCHAR2(10) 表示雇员姓名 3 JOB VARCHAR2(9) 表示工作职位 4 MGR NUMBER(4) 表示雇员的领导编号 5 HIREDATE DATE 表示雇佣的时间 6 SAL NUMBER(7,2) 表示雇员的薪金 7 COMM NUMB…
一.基本数据类型的绑定 页面 <form action="${pageContext.request.contextPath}/test.do" method="post"> 年龄: <input type="text" name="age" /> <br><br> <input type="submit" value="提交"/&g…
一.什么是CXF?      Apache CXF = Celtix + Xfire,开始叫 Apache CeltiXfire,后来更名为 Apache CXF 了,以下简称为 CXF.Apache CXF 是一个开源的 web Services 框架,CXF 帮助您构建和开发 web Services ,它支持多种协议,比如:SOAP1.1,1,2 XML/HTTP.RESTful 或者CORBA.      RESTful: 一种风格而不是一个协议.它理念是网络上的所有事物都被抽象为资源,…
一.Bean的生命周期 1.概述      Spring IOC容器可以管理Bean的生命周期,Spring 允许在Bean的生命周期的特定点执行定制的任务.      Spring IOC容器对Bean的生命周期进行管理的过程:      (1)通过构造器或工厂方法创建Bean实例.      (2)为Bean的属性设置值和对其他Bean的引用.      (3)调用Bean的初始化方法.      (4)Bean可以使用了.      (5)当容器关闭时,调用Bean的销毁方法.     …
一.概述      Session接口是Hibernate向应用程序提供的操纵数据库最主要的接口,它提供了基本的保存.更新.删除和加载Java对象的方法.      Session具有一个缓存,位于缓存中的对象称为持久化对象,它和数据库相关记录对应.      Session能够在某些时间点按照缓存中对象的变化来执行相关SQL语句,来同步更新数据库,这一过程称为清理缓存(flush).   二.Session的缓存 1.理解     如果希望一个Java对象A一直处于生命周期中,就必须保证至少有…
一.查找节点      查找属性节点: 通过jQuery的选择器来完成.      操作属性节点: 调用jQuery对象的attr()来获取它的属性值.      操作文本节点: 通过text()方法. //1.操作文本节点:通过jQuery的text()方法 alert($("#bj").text()); $("#bj").text("南京"); alert($("#bj").text()); //2.操作属性节点 //注:…
一.数组简介     JavaScript数组的每一项都可以保存任何类型的数据,也就是说数组的第一个位置保存字符串,第二个位置可以保存数值,第三个位置可以保存对象,而且数组的大小是可以动态调整的,即可以随着数据的添加而自动增长以扩容纳新增数据.   二.数组的操作 1.创建 //创建一个空数组 var arr = []; var arr2 = [1,true,new Date()]; arr2.length = 2; alert(arr2); //true   2.pop和push方法     …
一.BLOB类型介绍      在MySQL中,BLOB是一个二进制的大型对象,可以存储大量数据的容器,它能容纳不同大小的数据.      在MySQL中有四种BLOB类型.          实际使用中根据需要存入的数据大小定义不同的BLOB类型.需要注意的是,如果存储的文件过大,数据库的性能会下降.   二.Java数据类型与MySQL类型对照表      对于blob,一般用于对图片的数据库存储,原理是把图片打成二进制,然后进行的一种存储方式,在java中对应byte[]数组.      …
本篇介绍Node.js访问数据库并返回数据给客户端 需求基于Node.js学习(二) 数据库请下载:user.sql 1.创建user 实体类(model-user.js) function User(id,userName,userPsw){ this.id = id; this.userName = userName; this.userPsw = userPsw; } // getter User.prototype.getUserName = function () { return t…
获取原生的DOM 注意:获取DOM是要在组件渲染之后才能被获取,所以在constructor里面获取不到原生的DOM 方法一:回调函数   推荐 方法二:createRef()   16版本,推荐 方法三:ref   15版本,不推荐 import React,{Component,createRef} from 'react'; export default class Study extends Component { constructor(props){ super(props); th…
上一篇讲的是Account 和 Contact,本篇主要描述 Lead & Opportunity & Quote.他们的主要的作用如下: Lead 用来存储潜在客户. Opportunity 用来track潜在的订单. Quote 用来记录不断和客户进行报价的信息. 一.Lead 我们通过做市场活动,或者用户点击了公司网站,电销,广告等方式,使用户对公司的产品感兴趣,我们可以将这些针对公司产品感兴趣的用户作为潜在用户存储到Lead中,针对优质的Lead,后期可以转换成 Account和…
我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n.n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推…… 以下实例我们向脚本传递三个参数,并分别输出,其中 $0 为执行的文件名: #!bin/bash echo "Shell 文件名: $0" echo "第一个参数: $1" echo "第二个参数: $2" echo "第三个参数: $3" 为脚本设置可执行权限…
一.list 增删改查 1.增加 方式一: stus = ['xiaohei','xiaobai','xiaohuang','cxdser'] stus.append('test001')#从最后面开始插入 print(stus) 输出:['xiaohei', 'xiaobai', 'xiaohuang', 'cxdser', 'test001'] 方式二: stus = ['xiaohei','xiaobai','xiaohuang','cxdser'] stus.insert(1,'test…
一.lua函数 1.在Lua中,函数是对语句和表达式进行抽象的主要方法.既可以用来处理一些特殊的工作,也可以用来计算一些值.Lua 提供了许多的内建函数,你可以很方便的在程序中调用它们,如print()函数可以将传入的参数打印在控制台上.Lua 函数主要有两种用途:1.完成指定的任务,这种情况下函数作为调用语句使用:2.计算并返回值,这种情况下函数作为赋值语句的表达式使用. 2.Lua 编程语言函数定义格式如下:optional_function_scope function function_…
Python Number 数据类型用于存储数值. 数据类型是不允许改变的,这就意味着如果改变 Number 数据类型的值,将重新分配内存空间. Python 四种数值类型: 整型(Int) - 通常被称为是整型或整数,是正或负整数,不带小数点. 长整型(long integers) - 无限大小的整数,整数最后是一个大写或小写的L. 浮点型(floating point real values) - 浮点型由整数部分与小数部分组成,浮点型也可以使用科学计数法表示(2.5e2 = 2.5 x 1…
定义一个简单的类 //定义类,包含field以及方法 自定义的getter 和setter 仅仅暴露field的getter和setter方法 private[this]的使用 (只能在当前实例中使用超出范围不行) java风格的getter和setter  scala.beans.BeanProperty 导入包…
map的操作 访问fangwemap元素 修改map元素 遍历map sortmap和linkmap map元素类型tuple…
一.key的相关操作 1.删除 del key1 key2 ... Keyn 作用: 删除1个或多个键. 返回值: 不存在的key忽略掉,返回真正删除的key的数量.   2.重命名 rename key newkey 作用: 给key赋一个新的key名 注:如果newkey已存在,则newkey的原值被覆盖.   3.随机key randomkey 作用: 返回随机key.   4.是否存在key exists key 作用: 判断key是否存在,返回1/0.   5.判断key的类型 typ…