Shiro是什么?

Shiro是一个非常强大的,易于使用的,开源的,权限框架。它包括了权限校验,权限授予,会话管理,安全加密等组件

什么时候使用它呢?

如果你是设计RBAC基础系统,需要编写大量用于权限控制的代码时,使用Shiro开源大大减少工作量。

使用到的包:

下载路径:

http://shiro.apache.org/download.html

Shiro结构图:

入门配置:

1.配置流程图

配置文件代码:

注意:配置文件的后缀一定要是  .ini

##[users]   #用于配置用户名信息
## 用户名= 密码, 角色1, 角色2, …, 角色N
##[roles] #用于配置角色信息
## 角色名= 权限1, 权限2, …, 权限N #全部权限使用 * (星号)
[users]
admin=123456,role_admin,role_edu
[roles]
role_admin = user:list,user:create,user:edit,user:delete
role_edu = edu:list,edu:create

测试代码:

package cn.gzsxt.shiro;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject; public class ShiroTest { public static void main(String[] args) {
//第一步:创建SecurityManager
//shiro框架读取配置文件,如果在源码夹下,需要在前缀加上classpath
IniSecurityManagerFactory imf=new IniSecurityManagerFactory("classpath:shiro.ini");
SecurityManager securityManager = imf.createInstance(); //第二步:创建一个身份对象Subject
SecurityUtils.setSecurityManager(securityManager);
Subject subject = SecurityUtils.getSubject(); UsernamePasswordToken token =new UsernamePasswordToken("admin1","123456");
//第三步:校验参数
try {
Subject resultSubject = securityManager.login(subject,token );
// System.out.println(resultSubject.getPrincipal());
// boolean hasRole = resultSubject.hasRole("role_admin");
// System.out.println(hasRole); boolean authenticated = resultSubject.isAuthenticated();
System.out.println(authenticated); } catch (AuthenticationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

Realm机制的必要性:

Shiro是通过Realm机制,实现将配置用户信息存放在数据库等储存系统中

通过Realm可以从数据库里面获得用户的验证信息

配置文件代码:

[main]
#声明realm对象
myRealm=cn.gzsxt.realm.MyRealm #指定securityManager的realm对象
securityManager.realms=$myRealm

编写Realm

package cn.gzsxt.realm;

import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection; public class MyRealm extends AuthorizingRealm{
/**
* 权限校验
*/
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
// TODO Auto-generated method stub
System.out.println("账号名:"+token.getPrincipal());
if ("admin".equals(token.getPrincipal())) {
SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(token.getPrincipal(),"123",this.getName());
return info;
}
return null;
}
/**
* 权限授权
*/
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection token) {
// TODO Auto-generated method stub
return null;
} }

测试代码:

package cn.gzsxt.shiro;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject; public class ShiroTest { public static void main(String[] args) { IniSecurityManagerFactory factory = new IniSecurityManagerFactory("classpath:Shiro.ini");
SecurityManager securityManager = factory.createInstance();
SecurityUtils.setSecurityManager(securityManager);
Subject subject = SecurityUtils.getSubject(); AuthenticationToken token = new UsernamePasswordToken("admin","123");
Subject resultSubject = securityManager.login(subject, token ); boolean authenticated = resultSubject.isAuthenticated();
System.out.println(authenticated);
}
}

附:加密

先创建一个Md5帮助类,得到加密后的密码,便于测试

md5帮助类代码:

package cn.gzsxt.utils;

import org.apache.shiro.crypto.hash.SimpleHash;
import org.apache.shiro.util.ByteSource; public class Md5Util { public static void main(String[] args) {
ByteSource salt = ByteSource.Util.bytes("123");
SimpleHash sh = new SimpleHash("md5", "123", salt,1); String target = sh.toString();
System.out.println(target);
} }

Realm处代码

Shiro安全框架的说明及配置入门的更多相关文章

  1. Shiro安全框架【快速入门】就这一篇!

    Shiro 简介 照例又去官网扒了扒介绍: Apache Shiro™ is a powerful and easy-to-use Java security framework that perfo ...

  2. Shiro安全框架入门使用方法

    详见:https://blog.csdn.net/qq_32651225/article/details/77199464 框架介绍Apache Shiro是一个强大且易用的Java安全框架,执行身份 ...

  3. shiro安全框架

    原文:http://blog.csdn.net/boonya/article/details/8233303 可能大家早先会见过 J-security,这个是 Shiro 的前身.在 2009 年 3 ...

  4. Shiro 安全框架详解二(概念+权限案例实现)

    Shiro 安全框架详解二 总结内容 一.登录认证 二.Shiro 授权 1. 概念 2. 授权流程图 三.基于 ini 的授权认证案例实现 1. 实现原理图 2. 实现代码 2.1 添加 maven ...

  5. Shiro 安全框架详解一(概念+登录案例实现)

    shiro 安全框架详细教程 总结内容 一.RBAC 的概念 二.两种常用的权限管理框架 1. Apache Shiro 2. Spring Security 3. Shiro 和 Spring Se ...

  6. Shiro 权限框架使用总结

    我们首先了解下什么是shiro ,Shiro 是 JAVA 世界中新近出现的权限框架,较之 JAAS 和 Spring Security,Shiro 在保持强大功能的同时,还在简单性和灵活性方面拥有巨 ...

  7. thymeleaf模板引擎shiro集成框架

    shiro权限框架.前端验证jsp设计.间tag它只能用于jsp系列模板引擎. 使用最近项目thymeleaf作为前端模板引擎,采用HTML档,未出台shiro的tag lib,假设你想利用这段时间s ...

  8. SpringMVC整合Shiro权限框架

    尊重原创:http://blog.csdn.net/donggua3694857/article/details/52157313 最近在学习Shiro,首先非常感谢开涛大神的<跟我学Shiro ...

  9. SpringBoot集成Shiro安全框架

    跟着我的步骤:先运行起来再说 Spring集成Shiro的GitHub:https://github.com/yueshutong/shiro-imooc 一:导包 <!-- Shiro安全框架 ...

随机推荐

  1. 微信小程序这一块(续)

    1.设置头部的信息 通过wx.setNavigationBarTitle 详情见:https://developers.weixin.qq.com/miniprogram/dev/api/ui/nav ...

  2. php开发环境是什么

    软件开发环境(Software Development Environment,SDE)是指在基本硬件和数字软件的基础上,为支持系统软件和应用软件的工程化开发和维护而使用的一组软件,简称SDE.它由软 ...

  3. #C语言l作业04

    这个作业属于哪个课程** C语言程序设计ll 这个作业的要求 (https://edu.cnblogs.com/campus/zswxy/SE2019-4/homework/9776) 我在这个课程的 ...

  4. 记一次Laravel 定时任务schedul:run未执行的处理

    关于Laravel的任务调度(定时任务)的配置在此不做赘述,跟着官方文档一步一步的操作是不会导致定时任务不能正常工作的. 为保证能及时捕获定时任务执行出现异常的原因,只需在配置系统crontab时指定 ...

  5. 【Jmeter】利用Jmeter+ant+Jenkins 搭建 接口&性能测试 持续集成平台

    https://www.jianshu.com/p/6ab73a95d53e https://yq.aliyun.com/articles/664329

  6. nodejs安装失败

    原文链接:https://www.cnblogs.com/huiziblog666/p/6274494.html 出现error 2502 和error2503是因为win8的权限问题所导致的,具体说 ...

  7. Junit测试错误:### Error building SqlSession

    错误代码: org.apache.ibatis.exceptions.PersistenceException: ### Error building SqlSession.### The error ...

  8. ubuntu离线安装mysql

    一:ubuntu离线安装mysql 转载来源:https://blog.csdn.net/liuhuoxingkong/article/details/80696574 参考文章:https://ww ...

  9. CSRF——跨站请求伪造

    一.CSRF是什么CSRF,全称:Corss-site request forgery,中文名称:跨站请求伪造.CSRF攻击比XSS攻击更具危险性,被安全界称为“沉睡的巨人”. 二.CSRF可以做什么 ...

  10. NGUI的anchors属性的使用

    一,anchors锚点 我们需要明白target目标的使用,这时是你下面使用left,right,bottom和top的距离,比如我们使用目标为UI Root,这个就是摄像机的视野,所以,我们使用an ...