<!--[if !supportLists]-->1、<!--[endif]-->Shiro简介
Shiro是专门一个权限以及认证授权的处理验证框架,它的主要功能是进行用户登录检测以及授权认证处理的操作开发框架。Shiro是有Apache推广的一个开源项目。“http://shiro.apache.org/”
Shiro主要功能:Primary Concerns(核心利益)
* Authentcation(身份验证) :登录验证用户是不是拥有相应的身份。
* Authorization(授权认证):验证某个已经认证的用户是否拥有某个权限。
* SessionManagement(会话管理) :用户登录后就是一次会话,没有退出之前,它的所有信息都保存在会话中,会话可以是JavaSE环境,也可以是Web环境。
* Cryptography(加密):保护数据的安全性,如密码加密存储到数据库中,而不是明文储存。
Shiro工作流程:
* ApplicationCode(应用代码) —》 Subject(主题) —》 Shiro SecurityManager(安全管理人员)
—》 Realm(域):Shiro从Realm获取安全数据(如用户、角色、权限),就是说SecurityManager要验证用户身份,那么它需要从Realm得到用户进行比较,以确定用户身份是否合法,也需要从Realm得到用户相应的角色/权限进行验证用户是否能进行操作;可以把Realm看成DataSource,即安全数据源。
<!--[if !supportLists]-->1、<!--[endif]-->Subject:应用在代码直接交互的对象是Subject,所有Subject都绑定到SecurityManager,可以把Subject认为是一个门面;SecurityManager才是实际的执行者;
<!--[if !supportLists]-->2、<!--[endif]-->SecurityManager:安全管理器,所有的安全有关的操作都会与SecurityManager交互,且他管理这个有Subject;可以看出的是Shiro的核心,他负责与后边介绍的其他组件进行交互,如果学习过SpringMVC,你可以把它看成DispatcherServlet前端控制器.
<!--[if !supportLists]-->3、<!--[endif]-->Realm:域,Shiro从Realm获取安全数据(如用户,角色,权限),就是说SecurityManager要验证用户身份,那么他需要从Realm获取相应的用户进行比较以确定用户身份是否合法,也需要从Realm得到用户形影的角色/权限进行验证用户是否能进行操作;可以把Realm看成DataSource,(表示安全数据源)。
Shiro只是提供有一个用户登录、授权认证的处理开发框架,它可以对所有的项目进行统一的授权处理操作。
<!--[if !supportLists]-->2、<!--[endif]-->基础身份验证
在Shiro里面用户需要为其提供两个内容:principals(身份)、credentials(证明):
* principals:描述的是用户输入的标识名称,例如:用户名,手机,邮箱等,这个唯一标识,
* credentials:需要知道认证主体的信息,例如:密码,安全证书。
如果想进行文本认证资源(shiro.ini)的信息加载那么必须依靠:org.apache.shiro.util.Factory<T>接口取得,在这个接口里面需要设置SecurityManager(安全管理),在此接口之中有一个方法:
* 取得SescurityManager 接口对象:public T getInstance() ;
* 资源文件取得:IniSecurityManagerFactory子类为Factory接口对象实例化:
<!--[if !supportLists]-->3、<!--[endif]-->认识Realm
为了统一数据的来源处理,准备了一个Realm接口。
//要求返回一个当前使用的Realm名字,这个名字可以任意返回。
* public String getName() ;
//判断你当前使用的Token的类型是否为指定的类型;
* public boolean supports(AuthenticationToken token) ;
//得到用户的认证信息,根据传入的Token取得
//token包含了要进行数据验证的所有数据
* public AuthenticationInfo getAuthenticationInfo(AuthenticationToken token)
<!--[if !supportLists]-->4、<!--[endif]-->固定信息Realm认证
如果要使用Realm操作,那么必须要有一个具体的认证类实现了Realm接口。
认证信息:AuthenticationInfo接口有连个方法:
* 取得所有的身份信息:public PrincipalCollection getPrincipals() ;
* 取得认证信息:public Object getCredentials()。
子类:SimpleAuthenticationInfo;
* 构造方法:public SimpleAuthenticationInfo(Ojbect principal,Object credentials,String realmName)。
所有用户的信息都保存在token里面:AuthenticationToken接口有两个方法:
* 身份数据:public Object getPrincipal() ;
* 认证数据:public Object getCredentials() ;
|-次数返回的数据为char[]数组,不直接转换为String;
<!--[if !supportLists]-->5、<!--[endif]-->认证授权
授权也称为访问控制,即:末一个资源库中的那些资源允许当前用户来进行访问,而在整个的授权之中包含以下几个概念:授权主体(Subject)、资源(Resource)、权限(Permission)、角色(Role)。
固定角色操作值得是直接利用配置文件实现。该实现要求在[users]下进行,而且配置的形式为:“用户名=密码,角色,角色...”。
<!--[if !supportLists]-->1、<!--[endif]-->角色检测在shiro之中Subject接口秘书的是用户的主题信息,所以针对于角色的认证处理都在此接口中提供,方法如下:
Public void checkRole(String roleIdentifier)throw AuthorizationException 检测一个角色是否存在 |
Public void checkRoles(String... roleIdentifiers) 检测所个角色是否存在 |
Public boolean hasRole(String roleIdentifier) 判断是否有指定的角色 |
Public boolean hasAllRoles(Collection<String> roleIdentifiers) 判断是否有角色 |
<!--[if !supportLists]-->2、<!--[endif]-->权限的判断处理依然在Subject接口之中完成,再次接口定义有如下方法:
Public void checkPermission(String permission) 检测权限是否存在,如果不存在抛出异常 |
Public void checkPermissions(String.. Permissions) 检测是否含有指定的所有权限,不存在抛出异常 |
Public boolean isPermitted(String permission) 判断是否有指定的一个权限 |
Public boolean isPermittedAll(String... Permissions)判断是否有指定的多个权限 |
<!--[if !supportLists]-->6、<!--[endif]-->权限认证
可以取得了角色数据,那么就意味着可以进行权限的取得,那么基本关系就是,一个角色对应有多个权限。
<!--[if !supportLists]-->1、<!--[endif]-->想要进行角色中所包含的权限的配置,那么可以直接在shiro.ini文件里面定义;
* 用户和角色:“用户名=密码,角色,角色,角色.....”
* 用户和权限:“角色=权限,权限......”。
<!--[if !supportLists]-->2、<!--[endif]-->对于权限的判断处理依然在Subject接口之中完成,再此接口里面定义有如下权限认证方法:
Public void checkPermission(String permission) 检测权限是否存在,如果不存在抛出异常 |
Public void checkPermissions(String... Permissions) 检测是否包含有指定的所有权限,不存在抛出异常, |
Public boolean isPermitted(String permission) 判断是否有指定的一个权限 |
Public booelan isPermittedAll(String... Permissions) 判断是否有指定的多个权限 |
<!--[if !supportLists]-->3、
<!--[if !supportLists]-->7、<!--[endif]-->在WEB中使用Shiro
Shiro过滤器过滤属性含义:
* securityManager(安全管理):这个属性是必须的。
* loginUrl:没有登录的用户请求需要登录的页面是自动跳转到登录页面,不是必须属性,不输入地址的话会自动寻找项目WEB项目的根目录下,的“/login.jsp”页面。
* successUrl:登录成功默认跳转页面,不配置则跳转至“/”。如果登录前点击登录页面,则在登录自动跳转到那个需要登录的页面。
* unauthorizedUrl(非法路径):没有权限默认跳转的页面。
权限过滤器及配置释义
* anon:例子/admin/**=annon 表示登录页面不需要进行检测处理。
* authc:表示需要认证(登录)才能使用,没有参数。
* roles:认证失败跳转页面。参数可以写多个,多个是必须加上引号,参数之间都好分割。
* perms(权限):例子/admins/user/**=perms[user:add:*],参数可以写多个,多个时必须加上引号,并且参数之间用逗号分割,例如/admins/user/**=perms["user:add:*,user:modify:*"],当有多个参数时必须每个参数都通过才通过,想当于isPermitedAll()方法。
* rest(休止符):例子/admin/user/**=rest[user],根据请求的方法,相当于/admins/user/**=perms[user:method],其中method为post,get,delete等。
* authBasic:例如/admin/user/**=authcBasic没有参数表示httpBasic
* ssl:例子/admin/user/**=ssl没有参数,表示安全url请求,协议为https
User:例如/admin/user/**=user没有参数表示必须存在用户,当登录操作是不做检查。
注:anon,authcBasic,auchc,user是认证过滤器,
perms , roles , ssl , rest , port 是授权过滤器
路径通配符:
* “?”:匹配任意的一个字符,
*“*”:匹配一个过多个任意的字符,例如“/admin*”,可以匹配“/admin123”、“/admin”;
* “**”:匹配零个或多个目录,
<!--[if !supportLists]-->8、<!--[endif]-->Shiro标签支持
<!--[if !supportLists]-->1、<!--[endif]--><%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags"%>
<!--[if !supportLists]-->2、<!--[endif]-->在Shiro里面提供有如下的标签内容:
* 取得用户名:<shiro:principal/>
如果想要在Servlet里面如的用户名:SecurityUtils.getSubject().getPrincipal();
* 是否具备有指定角色:<shiro:hasRole name=“角色名称”></shiro:hasRole>
相关推荐
Apache Shiro是一个强大且易用的Java安全框架,主要用于处理认证、授权、加密以及会话管理等核心安全性问题。在给定的压缩包"shiro1.3.2"中,包含了Shiro的一个核心组件库"shiro-all-1.3.2.jar"以及两个日志管理库...
Apache Shiro 是一个强大且易用的Java安全框架,提供了认证、授权、加密和会话管理功能,可以非常轻松地开发出足够安全的应用程序。它既适用于传统的Web应用,也适用于现代的Java EE和Android应用。现在我们来深入...
Apache Shiro是一个强大的Java安全框架,它提供了身份验证、授权、加密和会话管理功能,为开发人员构建安全的应用程序提供了便利。标题"shiro1.7.1.zip"表明这是Apache Shiro的一个版本更新,从1.3.2升级到1.7.1。...
### Apache Shiro 使用手册(一)Shiro架构介绍 #### 一、Shiro简介 Apache Shiro 是一款功能强大且易于使用的 Java 安全框架,它提供了多种安全相关的功能和服务,包括但不限于认证、授权、加密和会话管理。相较...
Apache Shiro是一个强大且易用的Java安全框架,它提供了认证、授权、加密和会话管理功能,可以非常方便地用于构建和强化应用程序的安全性。Shiro的核心目标是为开发者提供一个简单易用的安全API,使得开发者能够快速...
Apache Shiro 是一个强大且易用的Java安全框架,提供了认证、授权、加密和会话管理功能,可以非常轻松地开发出足够安全的应用。在"shiro_tool.zip"这个压缩包中,我们可以推测可能包含了一些关于Shiro使用的工具类、...
Apache Shiro 是一个强大且易用的 Java 安全框架,提供身份认证、授权、加密以及会话管理功能,简化了应用安全的实现。在提到的 "shiro_attack_by J1anfen" 工具中,重点是针对 Apache Shiro 的一个特定安全问题:...
Apache Shiro是一个强大的Java安全框架,它提供了身份验证、授权、加密和会话管理功能,为开发人员构建安全的应用程序提供了一种简单易用的方式。标题提到的"shiro项目基本运行架包以及全部的架包shiro-all.jar"正是...
Apache Shiro是一个强大且易用的Java安全框架,主要用于身份认证、授权(权限控制)、会话管理和加密等安全相关的功能。在这个"shiro权限案例demo"中,我们将深入探讨Shiro如何实现用户权限的管理。 首先,让我们...
Apache Shiro 是一个强大且易用的Java安全框架,提供了认证、授权、加密和会话管理功能,简化了企业级应用的安全实现。Shiro 1.13.0 是其一个重要的版本,包含了多项更新和改进。在这个版本中,开发者可以深入理解其...
Apache Shiro 是一个强大且易用的 Java 安全框架,提供身份认证、授权、加密和会话管理功能,简化了处理安全性的工作。在本文中,我们将深入探讨 Apache Shiro 的核心概念及其最简单的整合方式。 一、Shiro 的核心...
Apache Shiro 是一个强大且易用的 Java 安全框架,提供身份验证、授权、会话管理和加密服务。在 Java Web 应用中,Shiro 可以帮助开发者轻松地处理用户登录、登出以及权限控制等问题。在本文中,我们将讨论如何利用 ...
shiro使用的版本是1.2.4,存在反序列化漏洞,我们采取的办法是手动升级到了1.2.6版本,但苦于无法验证是否解决了问题,后来发现了一款测试工具,ShiroExploit。 测试工具下载地址 ... 反序列化漏洞是如何产生的?...
Apache Shiro 是一个强大且易用的 Java 安全框架,它提供了认证、授权、加密和会话管理功能,简化了开发人员在应用程序中处理安全问题的复杂性。ShiroTags 是 Shiro 提供的一套用于模板引擎的标签库,如 Freemarker ...
Apache Shiro是一个强大的Java安全框架,它为应用程序提供了身份验证、授权、会话管理和加密服务。"shiro-all jar"是Shiro的核心库,包含了所有Shiro的功能模块,方便开发者在一个JAR包中直接引用,避免了管理多个...
Apache Shiro是一个强大的Java安全框架,它提供了身份验证、授权、加密和会话管理功能,为开发人员构建安全的应用程序提供便利。在这个场景中,我们关注的是如何利用Shiro实现根据用户权限动态显示不同的菜单。 ...
SSM(Spring、SpringMVC、MyBatis)是一个经典的Java web开发框架组合,而Redis是内存数据库,常用于缓存和会话管理,Shiro则是一个强大的安全框架,负责认证、授权、会话管理和安全控制。下面我们将深入探讨如何在...
Apache Shiro是一个强大且易用的Java安全框架,它提供了认证、授权、加密和会话管理功能,可以简化开发人员处理安全的复杂性。Shiro适用于各种应用,从小型独立应用到大型分布式系统,都能有效地支持。 在"shiro-...
Apache Shiro 是一个强大且易用的Java安全框架,提供了认证、授权、加密和会话管理功能,可以非常直观地构建安全应用。本资源提供的是Apache Shiro的中文参考手册,对于正在学习或使用Shiro的开发者来说,是十分实用...