介绍:是一个java的安全(权限)框架

可以完成的功能:认证登录(Authentication)、授权(Authorization)、加密(cryptography)、会话管理(session management)、集成web(web support)、缓存(caching)、记住密码(remember me)。

类似功能的框架:Spring security 。

shiro的执行流程(从外部来看):应用程序->subject->Shiro SecurityManager->Realm.

subject shiro对外API核心就是Subject 。Subject代表当前用,这个登录对象不一定是人,可以是网络爬虫,机器人等。与Subject所有交互都会委托给SecurityManager,Subject是门面,SecurityManager才是真正的执行者。

SecurityManager 安全管理器:
所有与安全有关的操作都会放在SecurityManager中交互;
管理所有的Subject;
它是Shiro的核心,负责与shiro的其他组件进行交互,相当于SpringMVC中的DispatcherServlet。

Realm Shiro从Realm中获取安全数据(角色、用户、权限),它要验证用户身份,需要从Realm中获取相应的用户进行比较确定用户身份是否合法;也需要从Realm得到用户相应的角色/权限进行验证用户是否能进行操作,可以把Realm看成一个DataSource。
在Realm中,数据先从缓存中获取,如果在缓存中取不到再到数据库中获取,然后将数据放入缓存中。

一. Subject对象:Subject subject = SecurityUtils.getSubject();
通过获取subjecet对象后,Subject可以做很多事:

  1. subject.getSession();获取session对象,在获取到session后,就可以往session中存放session值了。
  2. subject.isAuthenticated();判断当前对象是否被认证,即是否登录。
  3. subject.login(token)
  4. subject.hasRole('role');对当前用户判断是否有一些角色信息.
  5. subject.isPermitted('user:delete:zhangsan') ; 判断当前主体是否有权限.判断用户是否有某种行为.当前代表user能够对zhangsan进行delete操作.
  6. subject.logout() ; 执行登出操作.

在subject调用login()方法的时候 , 会出现一些异常,这时候需要我们进行手动捕获这些异常,这些异常可能有 用户名不存在 UnknownAccountException 密码不正确IncorrectCredentialsException 账户被锁定LockedAccountException以及其他的认证异常(AuthenticationException).

二. token对象(): Shiro给我们提供了一个UsernamePasswordToken对象,其中封装了有username password rememberMe host 属性,其中我们可以对token对象进行继承并自定义,如添加是否是手机登录,添加email,别名等.subject判断当前登录主体是否被认证,如果发现没有登录,则需要将当前subject对象的信息放入到token中,subject对token进行登录验证.

Shiro笔记(一)Shiro整体介绍的更多相关文章

  1. Shiro笔记(五)JSP标签

    Shiro笔记(五)JSP标签 导入标签库 <%@taglib prefix="shiro" uri="http://shiro.apache.org/tags&q ...

  2. Shiro笔记(四)编码/加密

    Shiro笔记(四)编码/加密 一.编码和解码 //base64编码.解码 @Test public void testBase64(){ String str="tang"; b ...

  3. Shiro笔记(三)授权

    Shiro笔记(三)授权 一.授权方式 1.编程式: Subject subject=SecurityUtils.getSubject(); if(subject.hasRole("root ...

  4. Shiro笔记(二)身份验证

    Shiro笔记(二)身份验证 一.核心代码 @Test public void helloWorldTest(){ IniSecurityManagerFactory factory = new In ...

  5. Shiro笔记(一)基本概念

    Shiro笔记(一)基本概念 一.简介 Shiro是一个Java安全框架,可以帮助我们完成:认证.授权.加密.会话管理.与Web集成.缓存等. Authentication:身份认证/登录,验证用户是 ...

  6. Shiro学习笔记四(Shiro集成WEB)

    这两天由于家里出了点事情,没有准时的进行学习.今天补上之前的笔记 -----没有学不会的技术,只有不停找借口的人 学习到的知识点: 1.Shiro 集成WEB 2.基于角色的权限控制 3.基于权限的控 ...

  7. shiro原理及其运行流程介绍

    shiro原理及其运行流程介绍 认证执行流程 1.通过ini配置文件创建securityManager 2.调用subject.login方法主体提交认证,提交的token 3.securityMan ...

  8. Shiro笔记(六)Shiro标签的使用

    Shiro标签的使用 引入标签库 <%@taglib prefix="shiro" uri="http://shiro.apache.org/tags"% ...

  9. Shiro学习笔记五(Shiro标签,及通配符)

    1.首先是导入标签库 <%@taglib prefix="shiro" uri="http://shiro.apache.org/tags" %> ...

随机推荐

  1. shiro使用

    web.xml配置 <filter> <filter-name>shiroFilter</filter-name> <filter-class>org. ...

  2. Codeforces 1114F Please, another Queries on Array? [线段树,欧拉函数]

    Codeforces 洛谷:咕咕咕 CF少有的大数据结构题. 思路 考虑一些欧拉函数的性质: \[ \varphi(p)=p-1\\ \varphi(p^k)=p^{k-1}\times (p-1)= ...

  3. Oracle 网络监听配置管理

    Oracle 网络配置与管理 详细信息可以参考以下信息: [学习目标] 一.原理解析 二.配置侦听器(LISTENER) 三.配置客户端网络服务名 四.关于注册 五.查询某服务是静态还是动态注册 Or ...

  4. Confluence 6 避免和清理垃圾

    如果你的 Confluence 是允许公众访问的话,你可能会遇到垃圾内容的骚扰. 阻止垃圾发布者 希望阻止垃圾发布者: 启用验证码(Captcha),请参考页面 Configuring Captcha ...

  5. Confluence 6 从生产环境中恢复一个测试实例

    请参考 Restoring a Test Instance from Production 页面中的内容获得更多完整的说明. 很多 Confluence 的管理员将会使用生产实例运行完整数据和服务的 ...

  6. nginx实战(三)之静态资源web服务(跨站访问)

    语法 虽然说浏览器禁止跨站访问以防(CSRF),但出于一些原因还是要进行跨站访问,服务端通过设置头信息Access-Control-Allow-Orign:xxxx,客户端收到后就会允许跨站访问了 实 ...

  7. laravel CSRF 保护

    在开始之前让我们来实现上述表单访问伪造的完整示例,为简单起见,我们在路由闭包中实现所有业务代码: Route::get('task/{id}/delete', function ($id) { ret ...

  8. poj2817状态压缩 升维

    /* 两两求出字符串之间最大可以匹配的值 由已知状态推导出位置状态 状态s表示已经加入到集合中的字符串,0表示串i不存在,1存在 由于字符串的加入顺序会影响结果,所以增加一维来表示 dp[S][i]表 ...

  9. git bash中的快捷键

    转载: https://www.cnblogs.com/dhuhewang/p/6504914.html 1.bash命令格式 命令 [-options]  [参数],如:tar  zxvf  dem ...

  10. MySQL5.7.11版本,报错Cannot proceed because system tables used by Event Scheduler were found damaged at server start

    解决思路: 1. 在MySQL安装目录下执行./mysql_upgrade -uroot -p,此处是为了更新MySQL的系统表,在5.6之前的版本上,更新系统表的命令是mysql_fix_privi ...