Shiro 框架简单介绍

Shiro 框架简单介绍Shiro 框架简单介绍

大家好,又见面了,我是你们的朋友全栈君。

Shiro介绍

Shiro 是 JAVA 权限框架,较之 JAAS 和 Spring Security,Shiro 在保持强大功能的同时,还在简单性和灵活性方面拥有巨大优势。
Shiro 是一个强大而灵活的开源安全框架,能够非常清晰的处理认证授权管理会话以及密码加密
如下是它所具有的特点:

  • 易于理解的 Java Security API;
  • 简单的身份认证(登录),支持多种数据源(LDAP,JDBC,Kerberos,ActiveDirectory 等);
  • 对角色的简单的签权(访问控制),支持细粒度的签权;
  • 支持一级缓存,以提升应用程序的性能;
  • 内置的基于 POJO 企业会话管理,适用于 Web 以及非 Web 的环境;
  • 异构客户端会话访问;
  • 非常简单的加密 API;
  • 不跟任何的框架或者容器捆绑,可以独立运行。

Shiro 主要有四个组件

SecurityManager

典型的 Facade,Shiro 通过它对外提供安全管理的各种服务。

Authenticator

对“Who are you ?”进行核实。通常涉及用户名和密码。
这 个组件负责收集 principals 和 credentials,并将它们提交给应用系统。如果提交的 credentials 跟应用系统中提供的 credentials 吻合,就能够继续访问,否则需要重新提交 principals 和 credentials,或者直接终止访问。

Authorizer

身份份验证通过后,由这个组件对登录人员进行访问控制的筛查,比如“who can do what”, 或者“who can do which actions”。Shiro 采用“基于 Realm”的方法,即用户(又称 Subject)、用户组、角色和 permission 的聚合体。

Session Manager

这个组件保证了异构客户端的访问,配置简单。它是基于 POJO/J2SE 的,不跟任何的客户端或者协议绑定。

shiro的内置过滤器:

Shiro内置的FilterChain
授权过滤器:perms(指定资源需要哪些权限才可以访问),Roles, ssl,rest, port
认证过滤器:anon(不认证也可以访问),authcBasic, authc(必须认证后才可访问),user

FilterName Class
anon org.apache.shiro.web.filter.authc.AnonymousFilter
authc org.apache.shiro.web.filter.authc.FormAuthenticationFilter
authcBasic org.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter
perms org.apache.shiro.web.filter.authz.PermissionsAuthorizationFilter
port org.apache.shiro.web.filter.authz.PortFilter
rest org.apache.shiro.web.filter.authz.HttpMethodPermissionFilter
roles org.apache.shiro.web.filter.authz.RolesAuthorizationFilter
ssl org.apache.shiro.web.filter.authz.SslFilter
user org.apache.shiro.web.filter.authc.UserFilter

shiro各级关联

shiro三大核心模块:Subject(用户)、SecurityManager(框架心脏)、Realm(Shiro与应用安全数据间的“桥梁”)
SecurityManager去管理cacheManager缓存和sessionManager会话,sessionManager再去管理sessionDAO会话DAO 和sessionIdCookie会话ID生成器和sessionValidationScheduler会话验证调度器,cacheManager通过使用Ehcache实现,Realm通过自己自定义或者其他方式的权限存储来实现,比如登录等.

使用统一数据访问层,通过编写实体类,编写Repository接口,最后通过配置文件实现
Repository是标识,spring自动扫描,CrudRepository继承Repository实现curd,PagingAndSortingRepository继承CrudRepository实现分页排序,JpaRepository继承PagingAndSortingRepository实现JPA规范相关的方法,JpaSpecificationExecutor不属于Repository,比较特殊,它去实现一组JPA Criteria查询相关的方法。

  • Realm的作用:
    身份验证(getAuthenticationInfo 方法)验证账户和密码,并返回相关信息
    权限获取(getAuthorizationInfo 方法) 获取指定身份的权限,并返回相关信息
    令牌支持(supports方法)判断该令牌(Token)是否被支持
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/106529.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Rational Rose建立对象图

    Rational Rose建立对象图对象图要求建立如下对象图 2 1 定义类确定对象图中有哪些类 并在浏览器窗口中 建立每个类 步骤 1 在 LogicView 中添加类 Person Company 如图 1 20 所示 图 1 20 新建类 Person 和 Company2 2 建立对象图步骤 1 右击 LogicalView 打开快捷菜单 选择 New Collaboratio

    2025年10月16日
    4
  • 超详细的MySQL三万字总结[通俗易懂]

    超详细的MySQL三万字总结[通俗易懂]文章目录MySQL基础数据库的介绍数据库概述数据的存储方式数据库的概念常见数据库排行榜数据库的安装与卸载数据库的安装数据库的卸载数据库服务的启动与登录Windows服务方式启动DOS命令方式启动控制台连接数据库SQLyog图形化工具——客户端使用SQLyog登录数据库数据库管理系统数据库管理系统、数据库和表的关系SQL的概念什么是SQLSQL作用SQL语句分类MySQL的语法DDL操作数据库创建数据库创建数据库的几种方式查看数据库修改数据库删除数据库使用数据库DDL操作表结构创建表M

    2022年5月13日
    40
  • lora协议不属于lpwan_哪种协议用于wan

    lora协议不属于lpwan_哪种协议用于wan考虑使用LoRaWAN部署您的物联网解决方案?倘若您正在开发用于工业或企业用途的专用网络解决方案,那么您需要了解此技术的一些限制(以及在许多情况下将为您提供更好服务的替代协议)。在本文中,我们将深入探讨:LoRa与LoRaWAN的区别LoRaWAN如何运作LoRaWANA,B和C类啁啾率,处理增益和正交性利用LoRaWAN构建专用网络的障碍另一种解决方案:SymphonyLinkLoRa与Lo…

    2022年10月7日
    2
  • Python字符串中删除特定字符的方法

    Python字符串中删除特定字符的方法这篇文章主要介绍了Python字符串中删除特定字符的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧分析在Python中,字符串是不可变的。所以无法直接删除字符串之间的特定字符。所以想对字符串中字符进行操作的时候,需要将字符串转变为列表,列表是可变的,这样就可以实现对字符串中特定字符的操作。1、删除特定字符特定字符…

    2022年6月10日
    73
  • redisson读写锁使用场景_Redisson酒店

    redisson读写锁使用场景_Redisson酒店读写锁一次只有一个线程可以占有写模式的读写锁,但是可以有多个线程同时占有读模式的读写锁.正是因为这个特性,当读写锁是写加锁状态时,在这个锁被解锁之前,所有试图对这个锁加锁的线程都会被阻塞.当读写锁在读加锁状态时,所有试图以读模式对它进行加锁的线程都可以得到访问权,但是如果线程希望以写模式对此锁进行加锁,它必须直到所有的线程释放锁.通常,当读写锁处于读模式锁住状态时,如果有另外线程试图以写模式加锁,读写锁通常会阻塞随后的读模式锁请求,这样可以避免读模式锁长期占用,而等待的写模式

    2022年8月12日
    7
  • lineNumber: 6; columnNumber: 40; 文档根元素 “mapper” 必须匹配 DOCTYPE 根 “configuration”。

    lineNumber: 6; columnNumber: 40; 文档根元素 “mapper” 必须匹配 DOCTYPE 根 “configuration”。运行mybatis时报错:lineNumber: 6; columnNumber: 40; 文档根元素 “mapper” 必须匹配 DOCTYPE 根 “configuration”。Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.a…

    2022年6月13日
    38

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号