一、什么是shiro?

Apache Shiro 是一个强大而灵活的开源安全框架,它干净利落地处理身份认证,授权,企业会话管理和加密。   Apache Shiro 的首要目标是易于使用和理解。安全有时候是很复杂的,甚至是痛苦的,但它没有必要这样。框架应 该尽可能掩盖复杂的地方,露出一个干净而直观的 API,来简化开发人员在使他们的应用程序安全上的努力。

二、shiro可以做什么?

 验证用户来核实他们的身份。

 对用户执行访问控制,

如:

(1) 判断用户是否被分配了一个确定的安全角色

(2)判断用户是否被允许做某事

 在任何环境下使用 Session API,即使没有 Web 或 EJB 容器。

 在身份验证,访问控制期间或在会话的生命周期,对事件作出反应。

 聚集一个或多个用户安全数据的数据源,并作为一个单一的复合用户“视图”。

 启用单点登录(SSO)功能。

 为没有关联到登录的用户启用"Remember Me"服务。

Shiro 视图在所有应用程序环境下实现这些目标——从最简单的命令行应用程序到最大的企业应用,不强制依赖其 他第三方框架,容器,或应用服务器。当然,该项目的目标是尽可能地融入到这些环境,但它能够在任何环境下立 即可用。

三、shiro结构图

Shiro 把 Shiro 开发团队称为“应用程序的四大基石”——身份验证,授权,会话管理和加密作为其目标。

shiro核心四要素,简单的概述为认证,授权,会话,加密等。

 Authentication:有时也简称为“登录”,这是一个证明用户是他们所说的他们是谁的行为。

 Authorization:访问控制的过程,也就是绝对“谁”去访问“什么”。

 Session Management:管理用户特定的会话,即使在非 Web 或 EJB 应用程序。

 Cryptography:通过使用加密算法保持数据安全同时易于使用。

额外的功能概述:

 Web Support:Shiro 的 web 支持的 API 能够轻松地帮助保护 Web 应用程序。

 Caching:缓存是 Apache Shiro 中的第一层公民,来确保安全操作快速而又高效。

 Concurrency:Apache Shiro 利用它的并发特性来支持多线程应用程序。

 Testing:测试支持的存在来帮助你编写单元测试和集成测试,并确保你的能够如预期的一样安全。

 "Run As":一个允许用户假设为另一个用户身份(如果允许)的功能,有时候在管理脚本很有用。

 "Remember Me":在会话中记住用户的身份,所以他们只需要在强制时候登录。

四、简单的使用程序

示例为maven工程,jdk8,maven3以上

(1)pom依赖

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.apache.shiro.tutorials</groupId><artifactId>shiro-tutorial</artifactId><version>0.0.1-SNAPSHOT</version><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies>

      <dependency>            <groupId>org.slf4j</groupId>            <artifactId>slf4j-api</artifactId>            <version>1.7.5</version>        </dependency>        <dependency>            <groupId>org.slf4j</groupId>            <artifactId>slf4j-log4j12</artifactId>            <version>1.7.5</version>        </dependency>         <dependency>            <groupId>log4j</groupId>            <artifactId>log4j</artifactId>            <version>1.2.17</version>        </dependency><dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-core</artifactId><version>1.1.0</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>2.0.2</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin><plugin><groupId>org.codehaus.mojo</groupId><artifactId>exec-maven-plugin</artifactId><version>1.1</version><executions><execution><goals><goal>java</goal></goals></execution></executions><configuration><classpathScope>test</classpathScope><mainClass>Tutorial</mainClass></configuration></plugin></plugins></build></project>

logger4j.properties配置文件内容:

如果不加入,将无法看到log4j日志打印的结果

#config root logger
log4j.rootLogger = INFO,system.out
log4j.appender.system.out=org.apache.log4j.ConsoleAppender
log4j.appender.system.out.layout=org.apache.log4j.PatternLayout
log4j.appender.system.out.layout.ConversionPattern=[Log]%-d{yyyy-MM-dd HH:mm:ss} %5p[%F:%L]:%m%n
#log4j.appender.system.out.layout.ConversionPattern=[Log] %5p[%F:%L]:%m%n#config this Project.file logger
log4j.logger.thisProject.file=INFO,thisProject.file.out
log4j.appender.thisProject.file.out=org.apache.log4j.DailyRollingFileAppender
log4j.appender.thisProject.file.out.File=pmslogout.log
log4j.appender.thisProject.file.out.layout=org.apache.log4j.PatternLayout
log4j.appender.thisProject.file.out.layout.ConversionPattern=[Log]%-d{yyyy-MM-dd HH:mm:ss} %5p[%F:%L]:%m%n
log4j.appender.thisProject.file.append=true

(2)运行main方法

import org.apache.log4j.Logger;

public class Tutorial {

    private static Logger logger = Logger.getLogger(Tutorial.class);

    public static void main(String[] args) {

        logger.info("Hello Wolrd Apache Shiro Application");        System.exit(0);    }    }

Enable Shiro

在应用程序中启用 Shiro 最先要明白的事情是几乎在 Shiro 中的每个东西都与一个名为 SecurityManager 的主要的/核 心的组件有关。对于那些熟悉 Java 安全的人来说,这是 Shiro 的 SecurityManager 概念——它不等同于 java.lang.SecurityManager。

现在了解 Shiro 的 SecurityManager 是应用程序的 Shiro 环境的核心及每个应用程序中必须存在一个 SecurityManager 是很有益处的。因此,在我们的实战系列应用程序中第一 件要做的事情就是配置 SecurityManager 实例。

Configuration

虽然我们能够直接实例化一个 SecurityManager 类,但 Shiro 的 SecurityManager 实现有足够的配置选项及内置组件 使得在 Java 源代码做这件事情变得较为痛苦——如果使用一个灵活的基于文本的配置格式来配置 SecurityManager, 那么这将是一件很容易的事情。

为此,Shiro 通过基于文本的 INI 配置文件提供了一个默认的"共性(common denominator)"解决方案。近来人们已 经相当厌倦了使用笨重的 XML 文件,且 INI 文件易于阅读,使用简单,依赖性低。你稍后将会看到有了对象导航图 的简单理解,INI 文件能够有效地被用来配置简单的对象图,如 SecurityManager。

Many Configuration Options

Shiro 的 SecurityManager 实现及所有支持组件都是兼容 JavaBean 的。这允许 Shiro 能够与几乎任何配置格式如 XML(Spring,JBoss,Guice 等等),YAML,JSON,Groovy Builder markup,以及更多配置被一起配置。INI 文件只是 Shiro 的“共性”格式,他它允许任何环境下的配置,除非其他选项不可用。

上面的简单应用仅仅只是证明加入shiro相关的依赖运行没问题,下面进入简单的真正实战

shiro.ini文件

权限角色相关的规则就在该文件中编写:

[user]
root = secret,admin
guest = guest,guest
presidentskroob = 12345,president
darkhelmet = ludicrousspeed,darklord,schwartz
lonestarr=vespa,goodguy,schwartz[roles]
admin = *j
schwartz = lightsaber:*
goodguy = winnebago:drive:eagle5

main方法运行:

import org.apache.log4j.Logger;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.util.Factory;public class Tutorial {private static Logger logger = Logger.getLogger(Tutorial.class);public static void main(String[] args) {logger.info("My First Apache Shiro Application");/***步骤一: 我们使用 Shiro 的 IniSecurityManager 实现来提取我们的 shiro.ini 文件,它位于 classpath 的根目录。* 该实现反映了 Shiro 对工厂设计模式的支持。* classpath: 前缀是一个资源定位符,用来告诉 shiro 去哪加载 ini 文件(其 他前缀,如 url:和 file:也同样被支持)。 */Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");/*** 步骤二: factory.getInstance()方法被调用,它来解析 INI 文件并返回反映该配置的 SecurityManager 实例。 */SecurityManager securityManager = factory.getInstance();/*** * 步骤三: 在这个简单的例子中,我们把 SecurityManager 设置为一个静态的(memory)单例,能够跨 JVM 访问。* 但请 注意,这是不可取的,如果你在单个的 JVM 只中会有不只一个启用 Shiro 的应用程序。对于这个简单的例子 而言,这是没有问题的,但更为复杂的应用程序环境通常将 SecurityManager * 置于应用程序特定的存储中(如 在 Web 应用中的 ServletContext 或 Spring,Guice 后 JBoss DI 容器实例)。*/SecurityUtils.setSecurityManager(securityManager);System.exit(0);}}

Apache Shiro简单的权限管理框架,无论是在github还是码云上,看过不少项目,基本都采取了shiro作为权限控制,spring securty,这个玩意,spring本身集成,不过它并没有shiro好理解,当然掌握好shiro对于理解spring security是非常有帮助的。

转载于:https://www.cnblogs.com/youcong/p/9125317.html

shiro实战系列(一)之入门实战相关推荐

  1. java 秒杀代码_Java秒杀系统实战系列~商品秒杀代码实战

    摘要: 本篇博文是"Java秒杀系统实战系列文章"的第六篇,本篇博文我们将进入整个秒杀系统核心功能模块的代码开发,即"商品秒杀"功能模块的代码实战. 内容: & ...

  2. Java秒杀系统实战系列~商品秒杀代码实战

    摘要: 本篇博文是"Java秒杀系统实战系列文章"的第六篇,本篇博文我们将进入整个秒杀系统核心功能模块的代码开发,即"商品秒杀"功能模块的代码实战. 内容: & ...

  3. android php实战,android编程开发入门实战例子–hello word

    android开发入门实战编程例子–hello word 1.打开Eclipse,选择菜单File->New->Other,打开新建对话框.选择Android Project后,点击Nex ...

  4. 关东升的iOS实战系列图书 《iOS实战:入门与提高卷(Swift版)》已经上市

                承蒙广大读者的厚爱我的 <iOS实战:入门与提高卷(Swift版)>京东上市了,欢迎广大读者提出宝贵意见.http://item.jd.com/11766718 ...

  5. 关东升的iOS实战系列图书 《iOS实战:传感器卷(Swift版)》已经上市

     承蒙广大读者的厚爱我的 <iOS实战:传感器卷(Swift版)>京东上市了,欢迎广大读者提出宝贵意见.http://item.jd.com/11760248.html 欢迎关注关东升 ...

  6. 推荐系统实战系列(python版).rar_python实战音乐推荐系统

    SVD奇异值分解里具体说了SVD的基本原理解读,本次实战分析SVD的应用 数据说明: 本次数据使用的是用户听音乐的数据,具体数据有需要的可以关注公众号:不懂乱问(Andy_shenzl)后台留言. 回 ...

  7. [SpringBoot实战系列]实现发送邮件API/发件人中文别名

    前言 由于价格监控项目的需求,实现了一个小的邮件发送接口服务,使用了一个单独的SpringBoot项目,给他取名为spring-mail-sender,开源在了Github上.内部我给他命名为提醒服务 ...

  8. sql判断时间大于0点_Java秒杀系统实战系列-数据库级别Sql的优化与代码的调整

    本文是"Java秒杀系统实战系列文章"的第十三篇,从本篇文章开始我们将进入"秒杀代码优化"环节,本文将首先从数据库级别Sql的优化入手,结合调整秒杀相关的部分核 ...

  9. kubernetes入门实战

    kubernetes入门实战 文章目录 kubernetes入门实战 一. Namespace 二. Pod 三. Label 四. Deployment 一. Namespace Namespace ...

最新文章

  1. wpf Visibility 动画
  2. 第五届蓝桥杯省赛javaB组试题解析
  3. Python title() 方法
  4. 程序人生:这5个程序员,改变了世界,你都认识吗!
  5. libnids校验和引起回放包不能正常捕捉
  6. 因云而生 全新视角看阿里云服务器硬件方升架构
  7. JavaWeb工程师知识图谱
  8. Oracle Database 21c 十大新特性一览 - New Features
  9. 解决新安装的Ubuntu18.04没有网络连接的问题
  10. 获取参数(可以是中文)
  11. tcl之quartus 脚本学习 · 1 quartus tcl packages 介绍
  12. MySQL存储过程(一)——存储过程理论基础
  13. python、mysql、git之各种系统下的安装
  14. ROS学习笔记02、ROS使用C++、Python来实现HelloWorld
  15. oracle vm win10,virtualbox win10系统下载-oracle vm virtualbox windows 10 64 bitv6.1.14 最新版 - 极光下载站...
  16. 26岁从财务转行软件测试,4年沉淀我已经是25k的测开工程师...
  17. Zemax光学设计(十二) —— 激光扫描物镜设计
  18. 新年Java小游戏之「年兽大作战」祝您笑口常开
  19. 分数换算小数补0法_高考志愿填报时“线差法”和“位次法”哪个好?
  20. C++ STL(八) -------- unordered_set、unordered_map的介绍+使用+比较

热门文章

  1. 操作无法完成后台打印程序无法运行
  2. Win8:Snap 实现
  3. Pentaho平台上加仪表盘插件步骤
  4. 什么是JAVA内容仓库(Java Content Repository)(3)
  5. CV00-03-CV基本操作2
  6. regexp 好汉字符串_如何在JavaScript中使用RegExp确认字符串的结尾
  7. zabbix简介及基本安装(一)
  8. <论文翻译>RepVGG: Making VGG-style ConvNets Great Again
  9. 配置linux-Fedora系统下iptables防火墙
  10. 中国书法的造型元素与原理 刘彦湖