JAVA技术交流QQ群:170933152

Shiro简介

Apache Shiro是Java的一个安全框架。目前,使用Apache Shiro的人越来越多,因为它相当简单,对比Spring Security,可能没有Spring Security做的功能强大,但是在实际工作时可能并不需要那么复杂的东西,所以使用小而简单的Shiro就足够了。对于它俩到底哪个好,这个不必纠结,能更简单的解决项目问题就好了。

Shiro架构与功能介绍

1.认证与授权相关基本概念

两个基本的概念

安全实体:系统需要保护的具体对象数据

权限:系统相关的功能操作,例如基本的CRUD

Authentication:身份认证/登录,验证用户是不是拥有相应的身份;

Authorization:授权,即权限验证,验证某个已认证的用户是否拥有某个权限;即判断用户是否能做事情,常见的如:验证某个用户是否拥有某个角色。或者细粒度的验证某个用户对某个资源是否具有某个权限;

Session Manager:会话管理,即用户登录后就是一次会话,在没有退出之前,它的所有信息都在会话中;会话可以是普通JavaSE环境的,也可以是如Web环境的;

Cryptography:加密,保护数据的安全性,如密码加密存储到数据库,而不是明文存储;

Web Support:Web支持,可以非常容易的集成到Web环境;

Caching:缓存,比如用户登录后,其用户信息、拥有的角色/权限不必每次去查,这样可以提高效率;

Concurrency:shiro支持多线程应用的并发验证,即如在一个线程中开启另一个线程,能把权限自动传播过去;

Testing:提供测试支持;

Run As:允许一个用户假装为另一个用户(如果他们允许)的身份进行访问;

Remember Me:记住我,这个是非常常见的功能,即一次登录后,下次再来的话不用登录了。

2.Shiro四大核心功能:Authentication,Authorization,Cryptography,Session Management

Shiro架构

3.Shiro三个核心组件:Subject, SecurityManager 和 Realms.

Subject:主体,代表了当前“用户”,这个用户不一定是一个具体的人,与当前应用交互的任何东西都是Subject,如网络爬虫,机器人等;即一个抽象概念;所有Subject都绑定到SecurityManager,与Subject的所有交互都会委托给SecurityManager;可以把Subject认为是一个门面;SecurityManager才是实际的执行者;

SecurityManager:安全管理器;即所有与安全有关的操作都会与SecurityManager交互;且它管理着所有Subject;可以看出它是Shiro的核心,它负责与后边介绍的其他组件进行交互,如果学习过SpringMVC,你可以把它看成DispatcherServlet前端控制器;

Realm:域,Shiro从从Realm获取安全数据(如用户、角色、权限),就是说SecurityManager要验证用户身份,那么它需要从Realm获取相应的用户进行比较以确定用户身份是否合法;也需要从Realm得到用户相应的角色/权限进行验证用户是否能进行操作;可以把Realm看成DataSource,即安全数据源。

Spring Security简介

Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。它是一个轻量级的安全框架,它确保基于Spring的应用程序提供身份验证和授权支持。它与Spring MVC有很好地集成,并配备了流行的安全算法实现捆绑在一起。安全主要包括两个操作“认证”与“验证”(有时候也会叫做权限控制)。“认证”是为用户建立一个其声明的角色的过程,这个角色可以一个用户、一个设备或者一个系统。“验证”指的是一个用户在你的应用中能够执行某个操作。在到达授权判断之前,角色已经在身份认证过程中建立了。

它的设计是基于框架内大范围的依赖的,可以被划分为以下几块。

  • Web/Http 安全:这是最复杂的部分。通过建立 filter 和相关的 service bean 来实现框架的认证机制。当访问受保护的 URL 时会将用户引入登录界面或者是错误提示界面。

  • 业务对象或者方法的安全:控制方法访问权限的。

  • AuthenticationManager:处理来自于框架其他部分的认证请求。

  • AccessDecisionManager:为 Web 或方法的安全提供访问决策。会注册一个默认的,但是我们也可以通过普通 bean 注册的方式使用自定义的 AccessDecisionManager。

  • AuthenticationProvider:AuthenticationManager 是通过它来认证用户的。

  • UserDetailsService:跟 AuthenticationProvider 关系密切,用来获取用户信息的。

Shiro和Spring Security比较

  1. Shiro比Spring更容易使用,实现和最重要的理解

  2. Spring Security更加知名的唯一原因是因为品牌名称

  3. “Spring”以简单而闻名,但讽刺的是很多人发现安装Spring Security很难

  4. 然而,Spring Security却有更好的社区支持

  5. Apache Shiro在Spring Security处理密码学方面有一个额外的模块

  6. Spring-security 对spring 结合较好,如果项目用的springmvc ,使用起来很方便。但是如果项目中没有用到spring,那就不要考虑它了。

  7. Shiro 功能强大、且 简单、灵活。是Apache 下的项目比较可靠,且不跟任何的框架或者容器绑定,可以独立运行

security框架工作笔记001--- Shiro和Spring Security对比_智慧城市项目中选型用Spring Security相关推荐

  1. eclipse启动springboot项目_多模块项目中的一个Spring Boot启动错误

    问题描述 Springboot项目在启动时,报出了以下错误: ***************************APPLICATION FAILED TO START*************** ...

  2. QT嵌入式之_QT介绍_安装_以及环境变量配置---QT嵌入式图形框架工作笔记001

    WPS也是用qt开发的,用qt开发,主要是可以方便的移植到各种平台,以及嵌入式平台. 也可以用QT来开发,在STM32平台运行的程序. 对于网络编程来说,如果我们基于传统的套接字来开发,会很慢,麻烦, ...

  3. security框架工作笔记002---CSRF跨站点请求伪造(Cross—Site Request Forgery)_理解和防御

    JAVA技术交流QQ群:170933152  CSRF概念:CSRF跨站点请求伪造(Cross-Site Request Forgery),跟XSS攻击一样,存在巨大的危害性,你可以这样来理解:   ...

  4. 【亲测成功】springboot中.yml没有spring的小叶子标志和项目中也没有spring绿色标志的解决办法

    前言 最近在进行SpringCloudAlibaba组件练习时,我使用的开发软件是IDEA,module构建太多了,导致我再创建yml文件时不能出现小叶子的标志: 我构建的项目工程: 这是idea编译 ...

  5. Disruptor本地线程队列_实现线程间通信---线程间通信工作笔记001

    Disruptor本地线程队列_实现线程间通信---线程间通信工作笔记001 看到同事用这个东西了,这个挺好用的说是,可以实现,本地线程间的通信,好像在c++和java中都可以用 现在没时间研究啊,暂 ...

  6. maven mybatis mysql_Java Web学习系列——Maven Web项目中集成使用Spring、MyBatis实现对MySQL的数据访问...

    标签: 本篇内容还是建立在上一篇Java Web学习系列--Maven Web项目中集成使用Spring基础之上,对之前的Maven Web项目进行升级改造,实现对MySQL的数据访问. 添加依赖Ja ...

  7. 乐鑫esp8266学习rtos3.0笔记第9篇:整理分享那些我在项目中常用的esp8266 rtos3.0版本的常见驱动,Button按键长短按、PWM平滑调光等。(附带demo)

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1. Esp8266之 搭建开发环境,开始一个"hello ...

  8. Sharding-Sphere,Sharding-JDBC_介绍_Sharding-Sphere,Sharding-JDBC分布式_分库分表工作笔记001

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 因为公司最近在做多租户的智慧城市相关的产品,这里,偶然看到这个框架,应该是可以用到,所以就看了一些 ...

  9. batch spring 重复执行_一个3年老javaer竟然连Spring的事务管理都不知道,惊呆了

    1.事务介绍 事务(Transaction),一般是指要做的或所做的事情.在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit). 这里我们以取钱的例子来讲解:比如你去ATM ...

最新文章

  1. opensuse11.4 apache2 403 错误.
  2. linux wireshark_4个好用的Linux监控工具
  3. c++构造函数用法一
  4. Ubuntu下一个好用的终端
  5. 经典英语口语,不得不看(推荐)
  6. 45.Keepalived高可用群集
  7. CSS3 display:flex和display:box有什么区别?
  8. SpringCloud之RestTemplate,几种常见的请求方式
  9. redhat linux7.0的安装
  10. C#基础 基本语法4
  11. Kava将于下午2时重新启动Kava Chain
  12. 如何列出mongo shell中的所有集合?
  13. Atitit (Sketch Filter)素描滤镜的实现  图像处理  attilax总结v2
  14. (2)从文件中解析JSON数据
  15. element-ui在打开两个对话框时出现阴影的解决办法
  16. Java成员变量、局部变量的默认值和初始化
  17. ietester测试本地html,网站浏览器兼容测试工具IETester
  18. python计算斜率以及给定一组点两两求斜率
  19. Facebook批量取消关注公共主页
  20. AutoML与NAS

热门文章

  1. DSB2017第一名代码尝试运行(记录自用)(三)
  2. 将自己的dcm数据制作成LUNA16数据集提供数据样式之代码整理
  3. 【数据结构算法】数据结构思维导图
  4. QT Embedded二三事之QObject的元对象
  5. 质数分布是否随机关乎安全大事
  6. mysql基于mysql-proxy和amoeba的读写分离以及tcpdump+wireshark工具验证(上)
  7. cisco最经典书籍 下载(全CCIE们的结晶)转载资料
  8. 这个“专题”的导读好像忘了更新了
  9. [2005/05/03] 卡耐基选语
  10. defer 和 async 区别