shiro能做什么?
登录验证:
不是登录用户不能访问敏感资源,只有登录了才可以访问敏感资源
权限验证:
不同的用户账号登录成功之后,用户所使用的功能不同
类似的安全框架:
1.spring security 功能完善,学习成本偏高
2.shiro 学习成本低,简单的安全框架,基本功能存在(登录认证,权限认证)
3.spring mvc interceptor(拦截器) 只能做登录认证,不能做权限认证
一、shiro的jar包依赖
在pom.xml文件中配置:
<!-- Apache Shiro 权限依赖 -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-all</artifactId>
<version>1.2.3</version>
</dependency>
<!-- spring aop 依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.7</version>
</dependency>
二、shiro的配置文件
配置文件关系注入图如下:
web.xml文件配置:
创建spring_shiro.xml文件并配置信息交给将shiro配件的bean交给spring容器管理:
三、shiro的原理图
shiro的登录认证:
用户登录成功就可以访问敏感资源
之后的所有访问都通过shiro直接访问指定的资源
用户没有登录成功,跳转到指定的登录页面
//环绕通知,可以控制目标方法的执行
public Object around(ProceedJoinPoint pjp){
try{
if(登录过){
returnValue=pjp.proceed();
}else{
//由shiro控制跳转到指定的页面,由spring_shiro.xml提供跳转的目的地
}
}
Object returnValue=null;
}
注意:没有shiro,项目的功能照样跑起来,添加shiro实际就是横切,把shiro横切到项目中, 实际就是代理模式!!!
shiro的权限认证:
一定是在登录认证完成后,才能做shiro的权限认证,根据用户的权限显示不同
四、shiro的功能模块图
shiro的功能列表:
主要的功能:
Authentication:登录认证
authorrization:权限认证
session management:用shiro管理会话对象
cryptography:加密处理
辅助功能:
web support:shiro可以用在web项目中
caching:缓存 用shiro做缓存管理
concurrency:支持高并发
Testing:用shiro测试
runas :shiro可以应用java项目
remember me:记住我
shiro的使用步骤:
application code:用户的代码,代表的一个shiro的启动入口,用shiro的api来启动shiro可以理解成把用户的数据用shiro的api传递给shiro,由shiro来处理用户数据
subject:原义是主题,每一个subject代表一个用户,抽象的用户,就是用shiro对用户的数据
进行封装,把数据封装给token(令牌),最终可以狭义理解成是数据的封装
securitymanager:安全管理中心是shiro的核心,所有的数据都要经过shiro的安全管理中心来管理
realm:英文原义是域或范围,可以理解成原始数据的源头,源头域,
五、策略模型图
六、实际应用
shiro项目的搭建步骤:
1.创建项目
2.导入jar
a.手动导入
b.maven导入
3.把shiro的对象,交给spring容器来管理
web.xml
添加一个shiro的过滤器,要用这个过滤器过滤所有url
spring_shiro.xml
配置shiro的安全管理中心的对象,还有shiro的过滤器对象,
还有登录和权限认证的接口的实现对象
4.创建java类,要给相应的接口给实现类
创建java类AuthRealm extends AuthorizingRealm
AuthorizingRealm实现自
implements org.apache.shiro.authz.Authorizer, org.apache.shiro.util.Initializable,
org.apache.shiro.authz.permission.PermissionResolverAware, org.apache.shiro.authz.permission.RolePermissionResolverAware
5.跑项目