shiro权限框架
首先Shiro较之 Spring Security,Shiro在保持强大功能的同时,还在简单性和灵活性方面拥有巨大优势。
Shiro是一个强大而灵活的开源安全框架,能够非常清晰的处理认证、授权、管理会话以及密码加密。如下是它所具有的特点:
- 易于理解的 Java Security API;
- 简单的身份认证(登录),支持多种数据源(LDAP,JDBC,Kerberos,ActiveDirectory 等);
- 对角色的简单的签权(访问控制),支持细粒度的签权;
- 支持一级缓存,以提升应用程序的性能;
- 内置的基于 POJO 企业会话管理,适用于 Web 以及非 Web 的环境;
- 异构客户端会话访问;
- 非常简单的加密 API;
- 不跟任何的框架或者容器捆绑,可以独立运行。
首先想使用一个插件必不可少的就是他的jar包!
这里我推荐版本较高的shiro-core 1.5.0的版本
包导入成功后直接带大家进入一个简单的案例让了解shiro的登录和权限判断简单的认识shiro的强大功能
首先创建一个空的maven项目
注意:这里创建空的maven项目无需勾选webapp前端,前期先带大家了解一下shiro的运行流程暂且不涉及业务层
在这和大家扯一个题外话,可能大家创建了很多次maven项目时都不知道里面的groupID和ArtifactID是什么意思
groupid和artifactId被统称为“坐标”是为了保证项目唯一性如果你要把你项目弄到maven本地仓库去,你想要找到你的项目就必须根据这两个id去查找。
创建成功后会得到一个这样的空maven项目
首先在resources文件夹中编写一个后缀名为.ini的文件,以.ini为后缀名的文件是项目中的配置文件,是整个项目共用的!
编写完文件中的内容后下面进入测试类测试shiro权限框架自带的登录判断和权限判断
我把shiro的登录判断分为了6步
//1.获取shiro.ini的信息获得工厂Factory<SecurityManager>
//2.初始化SecurityManager
//3.SecurityUtils.set将SecurityManager绑定到SecurityUtils
//4.Subject currentUser=SecurityUtils.getSubject();
//5. UsernameAndPasswordToken token =new UsernamePasswordToken("username","password")
//6. subject.login(token);//1.若不报异常,则认证成功;2.若报异常则认证失败
首先你需要知道的是当你使用了shiro权限框架,就无需再去编写登录判断的方法
//5. UsernameAndPasswordToken token =new UsernamePasswordToken("username","password")
下面上代码
//1.获取shiro.ini的信息获取factory工厂
Factory<SecurityManager>securityManagerFactory = new IniSecurityManagerFactory("classpath:shiro.ini");
//2.初始化SecurityManager
SecurityManager securityManager = securityManagerFactory.getInstance();
//3.SecurityUtils.set将SecurityManager绑定到SecurityUtils
SecurityUtils.setSecurityManager(securityManager);
//4.Subject
Subject subject = SecurityUtils.getSubject();
Session session = subject.getSession();
session.setAttribute("message","loginTest");
if(!subject.isAuthenticated()) {
//5.UsernameAndPasswordToken
UsernamePasswordToken token = new UsernamePasswordToken("root", "secret");
try {
token.setRememberMe(true);
subject.login(token);
System.out.println("认证成功");
System.out.println("谁登录了:"+subject.getPrincipal());
if(subject.hasRole("admin")){
System.out.println("该"+subject.getPrincipal()+"具备admin角色");
}else{
System.out.println("该"+subject.getPrincipal()+"不具备admin角色");
}
//判断当前用户是否具备某个操作的权限
//若是在controller层 user/login user/add user/delete
//正准备做删除操作,在方法中,在删除之前,进行权限的认证
if(subject.isPermitted("admin:add")){
System.out.println("具备新增的权限");
}else{
System.out.println("不具备新增的权限");
}
}catch (Exception e){
System.out.println("认证失败");
}
}
//登出
subject.logout();
}
虽然知道了大致流程,但大家肯定不理解其中的方法是什么意思,下面我给大家一一解释
getInstance():获取实例
setSecurityManager():设置安全管理器
getSubject():获取对象
isAuthenticated():已通过身份认证
setRememberMe():设置记住我
login():登录(shiro中的角色令牌)
getPrincipal():获取登录角色
hasRole():具有什么角色
isPermitted():被允许使用什么权限
logout():登出(退出登录)
今天讲解的只是shiro权限框架中很简单的入门基础,下期将会讲解配合前端业务层来使用,预知后事如何,请看下集!