shiro权限框架-入门基础

                         shiro权限框架

首先Shiro较之 Spring Security,Shiro在保持强大功能的同时,还在简单性和灵活性方面拥有巨大优势。

Shiro是一个强大而灵活的开源安全框架,能够非常清晰的处理认证、授权、管理会话以及密码加密。如下是它所具有的特点:

  1. 易于理解的 Java Security API;
  2. 简单的身份认证(登录),支持多种数据源(LDAP,JDBC,Kerberos,ActiveDirectory 等);
  3. 对角色的简单的签权(访问控制),支持细粒度的签权;
  4. 支持一级缓存,以提升应用程序的性能;
  5. 内置的基于 POJO 企业会话管理,适用于 Web 以及非 Web 的环境;
  6. 异构客户端会话访问;
  7. 非常简单的加密 API;
  8. 不跟任何的框架或者容器捆绑,可以独立运行。

 

首先想使用一个插件必不可少的就是他的jar包!

shiro权限框架-入门基础

 

这里我推荐版本较高的shiro-core  1.5.0的版本

包导入成功后直接带大家进入一个简单的案例让了解shiro的登录和权限判断简单的认识shiro的强大功能

 

首先创建一个空的maven项目

shiro权限框架-入门基础

注意:这里创建空的maven项目无需勾选webapp前端,前期先带大家了解一下shiro的运行流程暂且不涉及业务层

 

在这和大家扯一个题外话,可能大家创建了很多次maven项目时都不知道里面的groupID和ArtifactID是什么意思

shiro权限框架-入门基础

groupid和artifactId被统称为“坐标”是为了保证项目唯一性如果你要把你项目弄到maven本地仓库去,你想要找到你的项目就必须根据这两个id去查找。

 

创建成功后会得到一个这样的空maven项目

shiro权限框架-入门基础

 

 

首先在resources文件夹中编写一个后缀名为.ini的文件,以.ini为后缀名的文件是项目中的配置文件,是整个项目共用的!

shiro权限框架-入门基础

编写完文件中的内容后下面进入测试类测试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权限框架中很简单的入门基础,下期将会讲解配合前端业务层来使用,预知后事如何,请看下集!
上一篇:2021-03-20


下一篇:观察者模式