shiro框架简介,apache shiro怎么读
shiro框架简介,apache shiro怎么读详细介绍
本文目录一览: Shiro是什么?
Shiro是一个安全管理的框架,其可以实现常见安全管理相关的所有功能。包括:认证,鉴权,加密,记住等等。对于使用者而言,其核心概念如下:
Shiro由多种组件实现上述所说的功能,其实现机制如下图所示:
若依 权限框架 Shiro
1. shiro中的重要概念
要理解shiro,先要理解框架的几个概念:
1) Subject : 代表当前登陆或者访问的用户;
2) Principals :一般指用户名等,唯一表明Subject身份也就是当前用户身份的东西;
3) Credentials :凭证,一般指密码,对当前登陆用户进行验证;
4) Realms: 域,一般是指存储用户信息(用户名,密码,权限,角色)的数据库,也就是保存用户权限等信息的数据源 ;
5) SecurityManager :shiro安全管理的顶级对象。它集合或者说调用所有其它相关组件,负责所有安全和权限相关处理过程,就像一个中央集权政府;
2. shiro的子系统
上面我们说到shiro的主要功能有:认证,授权,加密,session管理等。而每一个主要功能对应于shiro的一个子系统, 下面分别介绍。
3. Authentication认证子系统
认证子系统,就是处理用户登录,验证用户登录。
一般我们new一个UsernamePasswordToken的对象:UsernamePasswordToken token = new UsernamePasswordToken("xxxusername", "xxxpassword");,
然后 subject.login(token); 就前去登录。相关代码一般如下:
Authentication 子系统会将password加密,然后使用username和加密之后的password和从Realm(一般是数据库)中根据usename获得的密码进行比较,相同就登录成功,不相同同就登录失败,或者用户名不存在也登录失败。就怎么简单。当然从Realm中根据用户名查找用户的过程是需要我们自己编码实现的。该功能的实现代码如下 。
4. Authorization 授权子系统(访问控制,权限控制)
在需要判断用户是否有某权限或者角色时,代码如下:
我们看到 doGetAuthorizationInfo 方法中使用了 SimpleAuthorizationInfo 类封装 Role 和 Permission.roles 和 stringPermissions 都是 String 类型的 Set, 也就是说,它们都是使用字符串来表示你拥有某个角色或者拥有某个权限的。
1) 两种访问控制方式:
SimpleAuthorizationInfo 封装了角色和权限,其实这也说明了实现“访问控制”两种方式:一是 “ 基于角色的访问控制 ” ;而是“ 基于资源的访问控制 ”。所谓的访问控制, 是指对于某个资源,当前用户是否有访问的权限。基于角色的访问控制是一种比较粗粒度的访问控制方式,只要你具有了某个或某几个角色,那么你就可以访问某资源。而基于资源的访问控制,是判断你针对该资源是否有某权限,有才能访问,粒度更细,你是否有某权限,可以根据你有哪些角色,然后改角色有哪些权限来判断的,当然也可以不引入角色的概念,直接判断你是否拥有某些权限。当然两种访问方式可以单独使用,也可以混合使用。比如对于比较简单的权限控制,你可以仅仅只使用基于角色的访问控制,仅仅引入角色表,不需要权限表都可以。混合使用是指,你可以同时要求用户具有某角色并且具有某些权限,才能访问某资源。所以shiro的权限控制时极其灵活的(当然也可以不引入角色表,仅仅引入权限表)。
2)权限的字符串表示方式
上面说到 角色 和 权限 都是使用字符串来表示的,其实 shiro 提供了一套比较强大有点复杂的权限字符串表示格式(分为:分割的三个部分):“ 资源:操作:对象实例ID ” 表示:对那个资源的哪个实例可以进行哪些操作,支持通配符。多个操作需要使用 “,” 逗号分割,而 “*” 放在三个位置上,分别表示:任意资源,任意操作,任意实例。比如:"user:delete:1" 就表示 对user表的id等于1对应的数据或者对象,可以进行删除操作。其实资源表现实现可以是对象,其实最终是对应到数据库表中的记录。再比如:"user:update,delete" 就表示 对user表(的任意实例)进行更新和删除操作。"user:update,delete" 其实就等价于 “user:update,delete:*”所以 shiro 的访问控制可以控制到具体实例,或者说具体哪条数据库记录,也可以在表级别控制。如果省略掉 对象实例ID部分,就是在表级别控制。
3)权限相关表的设计
1> 如果对于简单的情况,可以只使用“基于角色的访问控制”粗粒度方式,不涉及到权限,仅仅只通过判断是否有某角色来判断访问控制,那么就只需要增加一个角色表(roles) 和 一个角色(roles)和用户(user)的多对多的一个中间表——用户角色表(user_role)。
2> 如果仅仅使用权限来控制访问,那么就可以仅仅只增加一个权限表(priv)和一个用户和权限的多对多的一个中间表——用户权限表(user_priv).
3> 如果既要用到角色,又要用到权限(权限根据角色推算出来),那么就要增加:角色表,用户角色表,权限表,角色权限表。
4> 其实还有一种情况:就是角色和权限没有关系,那么就可以增加:角色表,用户角色表,权限表,用户权限表。不过这种方式不同符合常规。
其他的 如 Cryptography 加密子系统 和 Session Management会话管理子系统 这里不做介绍。
【Shiro】一步步的看Shiro 【Shiro与Spring Security区别】
Apache Shiro 是 Java 的一个安全框架。目前,使用 Apache Shiro 的人越来越多,因为它相 当简单,Shiro 可以非常容易的开发出足够好的应用,其不仅可以用在 JavaSE 环境,也可以用在 JavaEE 环境。Shiro 可以帮助我们完成:认证、授权、加密、会话管理、与 Web 集成、缓 存等
Spring Security是一个提供身份验证、授权和防范常见攻击的框架。它对命令式应用程序和响应式应用程序都提供了一流的支持,是保护基于spring的应用程序的事实上的标准
OAuth for Spring Security为Spring Security提供了一个OAuth实现。支持OAuth提供者和OAuth消费者的实现。支持OAuth 2.0
完美撒花~,下面我会根据Shiro的具体内容结合不同场景的进行讲述以及配置。
有需要讨论Shiro和Spring Security有什么区别或者有什么不同看法的,欢迎留言 大家共同学习
java的安全框架是什么
java的安全框架是什么?让我们一起看看吧!JAVA框架就是一些类和接口的集合,通过这些类和接口协调来完成一系列的程序实现,Java安全框架是指在用户使用过程中能够保证程序安全性的框架。下面介绍两种常见的Java安全框架:1、SpringSecurity:是一个强大且高度可定制的安全框架,致力于为Java应用提供身份认证和授权,核心功能主要包括:认证、授权和攻击防护 。2、Apache Shiro是一个强大且易用的Java安全框架,核心功能主要包括:执行身份验证、授权、密码学和会话管理。今天的分享就是这些,希望能给大家帮助哟!
【CVE-2016-4437】Shiro反序列化漏洞复现
Apache Shiro是一款开源的java安全框架,执行身份验证、授权、密码和会话管理。 Apache Shiro 1.2.4及以前版本中,加密的用户信息序列化后存储在名为rememberMe的Cookie中。攻击者可以使用Shiro的默认密钥伪造用户Cookie,触发Java反序列化漏洞,进而在目标机器上执行任意命令。
Apache Shiro <=1.2.4
使用vulhub搭建环境
尝试登录,登录的返回包中有 rememberMe=deleteMe 字段
或者不登录,发送一个GET请求登录页面的包,把cookie改成rememberMe=1,返回包中也存在 rememberMe=deleteMe 字段
则可判断使用了shiro框架,接下来使用工具ShiroExploit 检测是否存在shiro反序列化漏洞 https://github.com/feihong-cs/ShiroExploit-Deprecated/releases/tag/v2.51
当命令框可输入,代表存在漏洞
可以勾选便捷操作,反弹shell,输入攻击机的ip和端口号,并在攻击机监听端口,然后点fire,成功获取目标的shell
oauth2 和shiro的区别
oauth2 和shiro的区别为:性质不同、语言不同、用途不同。
一、性质不同
1、oauth2 :是OAuth协议的延续版本,但不向前兼容OAuth 2.0(即完全废止了OAuth1.0)。
2、shiro:是一个强大且易用的Java安全框架。
二、语言不同
1、oauth2 :PHP、JavaScript,Java
2、shiro:Java
三、用途不同
1、oauth2 :允许第三方应用代表用户获得访问的权限。
2、shiro:执行身份验证、授权、密码和会话管理。
参考资料来源:
百度百科——shiro
百度百科——OAuth2.0
Spring Security 和 Shiro 该如何选择?
要知道Shiro和Spring Security该如何选择,首先要看看两者的区别和对比
Apache Shiro是一个强大且易用的Java安全框架,能够非常清晰的处理认证、授权、管理会话以及密码加密。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。
Spring Security 主要实现了Authentication(认证,解决who are you? ) 和 Access Control(访问控制,也就是what are you allowed to do?,也称为Authorization)。
Spring Security在架构上将认证与授权分离,并提供了扩展点。它是一个轻量级的安全框架,它确保基于Spring的应用程序提供身份验证和授权支持。它与Spring MVC有很好地集成 ,并配备了流行的安全算法实现捆绑在一起。
shiro能实现的,Spring Security 基本都能实现,依赖于Spring体系,但是好处是Spring全家桶的亲儿子,集成上更加契合,在使用上,比shiro略负责。
Shiro比Spring Security更容易使用,也就是实现上简单一些,同时基本的授权认证Shiro也基本够用
Spring Security社区支持度更高,Spring社区的亲儿子,支持力度和更新维护上有优势,同时和Spring这一套的结合较好。
Shiro 功能强大、且 简单、灵活。是Apache 下的项目比较可靠,且不跟任何的框架或者容器绑定,可以独立运行。
如果开发的项目是Spring这一套,用Spring Security我觉得更合适一些,他们本身就是一套东西,顺畅,可能略微复杂一些,但是学会了就是自己的。如果开发项目比较紧张,Shiro可能更合适,容易上手,也足够用,Spring Security中有的,Shiro也基本都有,没有的部分网上也有大批的解决方案。
如果项目没有使用Spring这一套,不用考虑,直接Shiro。
同时要考虑团队成员的技术栈,更加熟悉使用哪个,在选型上,也要尽量避免给同行增加不必要的学习成本!
shiro权限框架怎么样
用来保护RESTful资源不错:HTTP Authentication and Security with Apache Shiro
据说1.2版本和OAuth能够整合,但是没有看到容易整合的资料,现在OAuth应用非常广泛多,也许两者也有重叠部分。
有时Java内部自己的开源会把开发者带到一个支路,而支持众多语言的开源项目一般比较主流强壮,特别是系统接口部分的开源项目,大家采取统一权限接口,那么你的open api才可能容易被使用,否则,别人用你的API还要研究一下你的特殊权限验证过程,而都采取OAuth,那么新浪微博搞定,腾讯也搞定,google也搞定。
apache shiro怎么读
出现以下的错误提示:
11:38:48,751 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] INFO EnvironmentLoader : Starting Shiro environment initialization.
11:38:48,783 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] ERROR EnvironmentLoader : Shiro environment initialization failed
org.apache.shiro.config.ConfigurationException:
Shiro INI configuration was either not found or discovered to be empty/unconfigured.
这个问题我也遇到了,原因应该是shiro.ini文件没有添加的问题。