Apache_Shiro开发文档

合集下载

ApacheShiro反序列化漏洞(Shiro-550CVE-2016-4437)

ApacheShiro反序列化漏洞(Shiro-550CVE-2016-4437)

ApacheShiro反序列化漏洞(Shiro-550CVE-2016-4437)0x00 漏洞描述Apache Shiro是⼀款开源安全框架,提供⾝份验证、授权、密码学和会话管理。

Shiro框架直观、易⽤,同时也能提供健壮的安全性。

Apache Shiro 1.2.4及以前版本中,加密的⽤户信息序列化后存储在名为remember-me的Cookie中。

攻击者可以使⽤Shiro的默认密钥伪造⽤户Cookie,触发Java反序列化漏洞,进⽽在⽬标机器上执⾏任意命令只要rememberMe的AES加密密钥泄露,⽆论shiro是什么版本都会导致反序列化漏洞。

0x01 影响版本Apache Shiro <= 1.2.40x02 漏洞原理Apache Shiro框架提供了记住我的功能(RememberMe),关闭了浏览器下次再打开时还是能记住你是谁,下次访问时⽆需再登录即可访问。

⽤户登陆成功后会⽣成经过加密并编码的cookie。

Apache Shiro 1.2.4及以前版本中,Apache Shiro默认使⽤了CookieRememberMeManager,其处理cookie的流程是:得到rememberMe的cookie值 > Base64解码–>AES解密–>反序列化。

然⽽AES的密钥是硬编码的,就导致了攻击者可以构造恶意数据造成反序列化的RCE漏洞在服务端接收cookie值时,按照如下步骤来解析处理:1、检索RememberMe cookie 的值2、Base 64解码3、使⽤AES解密(加密密钥硬编码)4、进⾏反序列化操作(未作过滤处理)但是,AES加密的密钥Key被硬编码在代码⾥,意味着每个⼈通过源代码都能拿到AES加密的密钥。

因此,攻击者构造⼀个恶意的对象,并且对其序列化,AES加密,base64编码后,作为cookie的rememberMe字段发送。

Shiro将rememberMe进⾏解密并且反序列化,最终造成反序列化漏洞。

Apache模块开发指南

Apache模块开发指南

Apache模块开发指南1000字Apache是一款非常流行的开源Web服务器,它的支持模块化架构设计使其可以扩展其功能,增加一些自定义的操作。

而Apache模块开发则是开发者可以根据业务需求自定义功能与处理方式。

Apache模块开发主要有两种形式,一种是编写模块,另外一种是编写模块的扩展。

编写模块编写模块起用比较简单,只需按照Apache的模块接口格式,将其添加到源代码中即可。

开发一个Apache模块,需要掌握以下几个知识点。

1. Apache的模块结构Apache上的模块采用模块函数表结构,在这个结构中定义了一组指向具体实现代码的函数指针。

因此,开发人员需要在模块函数表结构中,添加自己的模块函数。

这里所定义的模块函数在挂载模块和模块的时候会被调用,实现对模块的对应的控制操作。

2. 请求的处理方式Apache处理请求的方式随请求的不同而不同,常见的是处理静态请求和动态请求。

当处理静态请求时,Apache从磁盘上读取所需的静态文件;当处理动态请求时,Apache则转向Perl、PHP等脚本处理器,处理所需的请求。

我们在实际开发中需要针对不同的请求,实现对应的处理方式。

3. 访问请求的内存池Apache为每个请求都创建了一个内存池,开发者可以在该内存池中分配内存空间,以便在请求被处理的各个阶段使用。

4. 访问请求前的验证环节Apache提供了一个验证模式,允许模块在允许或拒绝请求前进行验证。

验证的方法可以是基于用户的,也可以是基于请求URL的。

实现这一验证功能需要针对验证模式,实现特定的验证函数。

编写模块的扩展Apache模块的扩展,通常是一组函数包,用于向开发者提供一些辅助处理方法。

在Apache的扩展中,扩展者通常需要实现以下几个方面的内容:1. 实现驱动函数Apache扩展的驱动函数通常负责初始化和清除扩展时所需要的一些内存。

为了保证扩展的正常运作,开发者需要注意以确保驱动函数被正确的使用。

Shiro权限管理框架(一):Shiro的基本使用

Shiro权限管理框架(一):Shiro的基本使用

Shiro权限管理框架(⼀):Shiro的基本使⽤shiro概念:Apache Shiro是⼀个强⼤且易⽤的Java安全框架,执⾏⾝份验证、授权、密码和会话管理。

使⽤Shiro的易于理解的API,您可以快速、轻松地获得任何应⽤程序,从最⼩的移动应⽤程序到最⼤的⽹络和企业应⽤程序。

上⾯这段话来⾃百度百科,没啥⽤。

想要快速理解并使⽤Shiro要先从最重要的三⼤概念⼊⼿。

1. Subject:⼤⽩话来讲就是⽤户(当然并不⼀定是⽤户,也可以指和当前应⽤交互的任何对象),我们在进⾏授权鉴权的所有操作都是围绕Subject(⽤户)展开的,在当前应⽤的任何地⽅都可以通过SecurityUtils的静态⽅法getSubject()轻松的拿到当前认证(登录)的⽤户。

2. SecurityManager:安全管理器,Shiro中最核⼼的组件,它管理着当前应⽤中所有的安全操作,包括Subject(⽤户),我们围绕Subject展开的所有操作都需要与SecurityManager进⾏交互。

可以理解为SpringMVC中的前端控制器。

3. Realms:字⾯意思为领域,Shiro在进⾏权限操作时,需要从Realms中获取安全数据,也就是⽤户以及⽤户的⾓⾊和权限。

配置Shiro,我们⾄少需要配置⼀个Realms,⽤于⽤户的认证和授权。

通常我们的⾓⾊及权限信息都是存放在数据库中,所以Realms也可以算是⼀个权限相关的Dao层,SecurityManager在进⾏鉴权时会从Realms中获取权限信息。

这三个基本的概念简答理解后就可以开始配置和使⽤Shiro了,其实Shiro最基本的使⽤⾮常简单,加⼊依赖后只需要配置两个Bean,再继承⼀个抽象类实现两个⽅法即可。

基本使⽤:引⼊⼀个依赖新建⼀个基于Springboot的Web项⽬,引⼊Shiro依赖。

<!-- https:///artifact/org.apache.shiro/shiro-web --><dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-spring</artifactId><version>1.4.0</version></dependency>配置两个Bean新建⼀个Shiro配置类,配置Shiro最为核⼼的安全管理器SecurityManager。

ApacheShiro的作用和使用方式

ApacheShiro的作用和使用方式

ApacheShiro的作用和使用方式Apache Shiro的作用和使用方式Apache Shiro是一个功能强大且易于使用的Java安全框架,旨在为应用程序提供身份验证、授权、加密和会话管理等安全功能。

本文将介绍Apache Shiro的作用以及使用方式,并帮助读者更好地理解和应用该框架。

作用:1. 身份验证(Authentication):Apache Shiro提供了多种身份验证机制,包括基于表单的身份验证、基于LDAP的身份验证和基于数据库的身份验证等。

通过使用Shiro的身份验证功能,应用程序可以验证用户的身份,并确保只有经过身份验证的用户才能访问受保护的资源。

2. 授权(Authorization):Apache Shiro支持基于角色和权限的访问控制。

通过定义角色和权限,应用程序可以根据用户的身份和权限限制其对资源的访问。

Shiro还提供了基于注解的授权功能,可以方便地在代码中标注需要授权的方法或类。

3. 加密(Cryptography):Apache Shiro提供了密码加密和解密的功能,可以帮助应用程序保护用户的密码和敏感信息。

Shiro支持常用的加密算法,如MD5、SHA和AES等,开发者可以根据需求选择合适的加密方式。

4. 会话管理(Session Management):Apache Shiro可以有效地管理用户会话,包括会话的创建、维护和销毁。

Shiro支持将会话存储在内存中、数据库中或持久化到文件系统中,并且提供了集群会话管理的解决方案,可用于多台服务器的分布式应用程序。

使用方式:1. 引入依赖:在项目的构建文件中,添加Apache Shiro的依赖项。

如果使用Maven进行项目管理,可以在pom.xml文件中添加以下依赖:```xml<dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-core</artifactId><version>1.7.1</version></dependency>```2. 配置文件:创建一个名为shiro.ini的配置文件,其中包含了应用程序需要的安全配置信息,如身份验证器、授权器和加密器等。

apache shiro rememberme反序列化规则

apache shiro rememberme反序列化规则

apache shiro rememberme反序列化规则Apache Shiro是一个强大的、灵活的安全框架,它允许认证、授权、加密和会话管理。

在Shiro中,"RememberMe"功能允许用户在关闭浏览器后仍然保持登录状态。

然而,如果未正确配置"RememberMe",则可能会出现安全问题,如"反序列化攻击"。

这是因为"RememberMe"功能通常涉及到将用户会话数据序列化并存储在客户端(如cookie),然后在用户下次访问时进行反序列化。

如果攻击者能够修改存储在客户端的数据,他们可能会进行恶意操作,例如将一个已登录的用户会话转移到另一个用户。

为了防止这种攻击,你需要确保以下几点:1. 使用安全的序列化机制:默认情况下,Shiro使用Java的序列化机制。

然而,Java序列化不是安全的,因为它不验证发送方的身份。

为了安全起见,你应该使用一个安全的序列化机制,如JSON或加密的二进制格式。

2. 使用安全的加密:为了确保存储的数据在传输过程中不被篡改,你应该使用安全的加密算法对数据进行加密。

3. 验证数据的完整性:在反序列化数据之前,你应该验证数据的完整性。

如果数据被篡改,你应该拒绝反序列化并使用户登出。

4. 使用HTTP Only Cookies:为了防止通过JavaScript访问存储在cookie中的数据,你应该设置cookie的HTTP Only属性。

这样,只有服务器可以访问cookie 数据,从而防止了攻击者通过客户端脚本修改cookie。

5. 确保密钥的安全性:对于任何加密或哈希操作,你都应该使用强密钥。

如果攻击者获得了密钥,他们可能会解密或伪造数据。

6. 限制RememberMe的会话超时时间:不要让RememberMe会话无限期地持续下去。

设置一个合理的超时时间可以减少长时间未活动的会话被劫持的风险。

ApacheShiro反序列化漏洞(Shiro-721CVE-2016-4437)

ApacheShiro反序列化漏洞(Shiro-721CVE-2016-4437)

ApacheShiro反序列化漏洞(Shiro-721CVE-2016-4437)0x00 漏洞介绍Apache Shiro 存在⾼危代码执⾏漏洞。

该漏洞是由于Apache Shiro cookie中通过 AES-128-CBC 模式加密的rememberMe字段存在问题,⽤户可通过Padding Oracle 加密⽣成的攻击代码来构造恶意的rememberMe字段,并重新请求⽹站,进⾏反序列化攻击,最终导致任意代码执⾏。

0x01 影响版本Apache Shiro 1.2.5, 1.2.6, 1.3.0, 1.3.1, 1.3.2, 1.4.0-RC2, 1.4.0, 1.4.1版本。

0x02 漏洞指纹1.set-Cookie: rememberMe=deleteMe2.URL中有shiro字样3.有⼀些时候服务器不会主动返回 rememberMe=deleteMe, 直接发包即可0x03 利⽤技巧1.该漏洞需要登录后获取到合法的Cookie: rememberMe=XXX后才可以进⾏利⽤, 看起来不是很好利⽤但实际上有⼀些⽹站是开放注册的, ⽽且这个洞不需要知道服务端密钥所以后续的利⽤还是可以同Shiro-550⼀样利⽤, ⽽且这⾥是AES加密的, ⾃带过WAF属性;2.如果攻击没有⽣效, 可以试⼀下删除Cookie中的JSESSIONID 字段, 很多时候这个字段存在的话, 服务端不会去处理 rememberMe。

0x04 漏洞原理由于Apache Shiro cookie中通过 AES-128-CBC 模式加密的rememberMe字段存在问题,⽤户可通过Padding Oracle 加密⽣成的攻击代码来构造恶意的rememberMe字段,并重新请求⽹站,进⾏反序列化攻击,最终导致任意代码执⾏。

0x04 环境搭建1.利⽤docker搭建环境⼀:root@backlion-virtual-machine:/opt# docker pull vulfocus/shiro-cve_2016_4437root@backlion-virtual-machine:/opt#docker psroot@backlion-virtual-machine:/opt#docker run -d -p 8080:8080 -v /var/run/docker.sock:/var/run/docker.sock -e VUL_IP=192.168.1.14 be60cf0b77042.利⽤dokcer 搭建环境⼆:复现环境: Apache Shiro 1.4.1 + tomcat:8-jre8git下载shiro-720到本地环境git clone对shiro-720进⾏编译cd Shiro-721/Dockerdocker build -t shiro-721 .启动dokcer并将端⼝8080映射到主机端⼝8080上docker run -p 8080:8080 -d shiro-721查看是否搭建成功docker ps3.通过⾃⾏编译1.4.1war 包放⼊tomcat容器中运⾏安装mavenwgettar zxvf apache-maven-3.6.3-bin.tar.gz -C /usr/localvi /etc/profileexport MAVEN_HOME=/usr/local/apache-maven-3.6.3export PATH=$MAVEN_HOME/bin:$PATHsource /etc/profilemvn -vvim /usr/local/apache-maven-3.6.3/conf/settings.xml找到mirrors节点添加阿⾥镜像库地址:<mirrors><mirror><id>alimaven</id><name>aliyun maven</name><url>/nexus/content/groups/public/</url><mirrorOf>central</mirrorOf></mirror></mirrors>可从 Apache Shiro Gtihub 官⽅仓库⾃⾏下载漏洞影响版本(https:///apache/shiro),使⽤ Apache Maven(软件项⽬管理及⾃动构建⼯具) 编译构建⽣成 war Java 应⽤程序包。

shiro securityutils 解析

shiro securityutils 解析

shiro securityutils解析Shiro(Apache Shiro)是一个用于身份验证、授权和加密的开源Java安全框架。

`SecurityUtils`是Shiro框架中的一个工具类,提供了一些便捷的方法来访问和操作Shiro 的安全功能。

以下是对`SecurityUtils`的一些主要功能和用法的解析:1.获取Subject对象:```javaSubject currentUser=SecurityUtils.getSubject();```可以使用`getSubject()`方法获取当前应用程序的Subject对象,Subject代表了当前用户。

通过Subject对象,可以进行身份验证、授权和其他安全操作。

2.身份验证:```javaif(!currentUser.isAuthenticated()){UsernamePasswordToken token=new UsernamePasswordToken("username", "password");token.setRememberMe(true);try{currentUser.login(token);}catch(AuthenticationException e){//身份验证失败}}```使用`login`方法进行身份验证。

在这个例子中,使用了`UsernamePasswordToken`来封装用户名和密码,然后通过`login`方法进行验证。

3.授权检查:```javaif(currentUser.hasRole("admin")){//执行某些操作,具有"admin"角色}```使用`hasRole`方法检查用户是否具有指定的角色。

4.权限检查:```javaif(currentUser.isPermitted("user:read")){//执行某些操作,具有"user:read"权限}```使用`isPermitted`方法检查用户是否具有指定的权限。

SpringSecurity与ApacheShiro的比较

SpringSecurity与ApacheShiro的比较

SpringSecurity与ApacheShiro的比较Spring Security与Apache Shiro的比较随着软件系统的快速发展,用户安全性在应用程序设计中变得越来越重要。

为了提供可靠的用户认证和授权机制,开发者可以使用不同的安全框架。

本文将比较并探讨Spring Security和Apache Shiro两个流行的安全框架,以帮助读者了解它们之间的差异和优劣势。

一、简介Spring Security是一个功能强大的安全框架,提供了全面的身份验证、授权和访问控制解决方案。

它是基于Spring Framework的,通过使用过滤器链和拦截器来实现安全功能。

Apache Shiro是一个易于使用的Java安全框架,提供身份验证、授权、加密和会话管理等功能。

它可以与任何应用程序集成,并且不依赖于任何其他框架。

二、功能比较1.身份验证Spring Security提供了多种身份验证机制,包括基于表单、HTTP基本认证、LDAP、OpenID等。

它还支持自定义身份验证方式,开发者可以根据应用程序的需求进行扩展。

Apache Shiro同样支持多种身份验证方式,包括基于表单、HTTP基本认证、LDAP等。

与Spring Security相比,它的身份验证配置更易于理解和使用。

2.授权Spring Security可以使用基于角色或基于权限的授权机制。

它提供了注解、表达式和配置文件等多种方式来定义安全规则,并使用AccessDecisionManager来进行决策。

Apache Shiro同样支持基于角色或基于权限的授权。

它使用一个简单的权限字符串来定义访问规则,并提供了很多方便的注解和API来实现授权功能。

3.会话管理Spring Security提供了多种会话管理方式,包括基于Cookie的会话和基于URL重写的会话。

它还支持集群和单点登录,并提供了容器管理和自定义会话存储等功能。

Apache Shiro同样提供了灵活的会话管理机制,包括基于Cookie的会话和基于URL重写的会话。

Shiro开发配置说明

Shiro开发配置说明

Shiro1.1.0开发配置文档建立一个java应用程序项目,项目及文件结构如图:注意以下几点:1、导入与Shiro相关的库,如图所示几个jar包,如运行时出现log4j相关的错误,则可能是log4j相关的包不正确;2、shiro.ini文件的路径问题,应放在项目根路径下,内容为:view plain1.[users]2.zwx=zavens3、log4j.properties文件为可选文件,建议自己设置log4j属性,内容为:view plain1.log4j.rootLogger=TRACE, stdout2.3.log4j.appender.stdout=org.apache.log4j.DailyRollingFileAppender4.log4j.appender.stdout.File=C:/log4j/log.txt5.log4j.appender.stdout.Encoding=GBK6.log4j.appender.stdout.Threshold=DEBUG7.log4j.appender.stdout.DatePattern='.'yyyy-MM-ddyout=org.apache.log4j.PatternLayoutyout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L : %m%n10..sf.ehcache=WARN.apache=WARN.quartz=WARN.apache.shiro=TRACE.apache.shiro.util.ThreadContext=INFO4、shiroAp.java内容:view plain1.package shiroap;2.3.import java.io.File;4.import java.io.IOException;5.import org.apache.shiro.SecurityUtils;6.import ernamePasswordToken;7.import org.apache.shiro.config.IniSecurityManagerFactory;8.import org.apache.shiro.mgt.SecurityManager;9.import org.apache.shiro.subject.Subject;10.import org.apache.shiro.util.Factory;11.12.public class ShiroAp {13.14.public static void main(String[] args) throws IOException {15. Factory<SecurityManager> factory = new IniSecurityManagerFactory("shiro.ini");16. SecurityManager sm=factory.getInstance();17. SecurityUtils.setSecurityManager(sm);18. Subject sub=SecurityUtils.getSubject();19.if(sub.isAuthenticated()){20. System.out.println("已登录,SESSION:" + sub.getSession());21. }22. System.out.println("未登录,SESSION:" + sub.getSession());23. UsernamePasswordToken at=new UsernamePasswordToken ("zwx","zavens");24.try{25. sub.login(at);26. }catch(Exception e){27. System.out.println("验证没通过!");28. }29.if(sub.isAuthenticated()){30. System.out.println("已登录,SESSION:" + sub.getSession());31. }32. }33.}Shiro是一个简单、开源且强大的安全管理框架,是实现单点登录的理想选择,常被应用于java web应用中。

shiro的使用的步骤

shiro的使用的步骤

shiro的使用的步骤Shiro是一个开源的Java安全框架,用于简化应用程序的身份验证、授权、加密等安全操作。

它提供了一套易于使用的API和一系列可配置的组件,以帮助开发者快速实现安全功能。

下面是使用Shiro的一般步骤:1. 引入Shiro依赖:首先,我们需要在项目中引入Shiro的依赖库。

可以通过Maven或手动下载并添加到项目中。

例如,在Maven 项目中,可以在POM文件中添加以下依赖:xml<dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-core</artifactId><version>1.8.0</version></dependency>2. 配置Shiro:在使用Shiro之前,我们需要配置Shiro的环境。

这包括配置安全策略、数据源、缓存等。

Shiro的配置可以通过properties文件、XML文件或编程方式进行。

- 配置文件方式:创建一个shiro.ini或shiro.xml文件,并配置相应的组件。

例如,定义一个基于用户名/密码的身份验证器:[main]myRealm = com.example.MyRealmsecurityManager.realms = myRealm[users]username=password- 编程方式:可以通过编写Java代码来配置Shiro的组件。

例如,以编程方式配置安全管理器:javaDefaultSecurityManager securityManager = new DefaultSecurityManager();securityManager.setRealm(new MyRealm());SecurityUtils.setSecurityManager(securityManager);3. 创建Realm:Realm是Shiro与应用程序数据交互的桥梁,用于身份验证、授权等操作。

Apache Shiro框架在Web系统的安全应用研究

Apache Shiro框架在Web系统的安全应用研究

本栏目责任编辑:代影网络通讯及安全Apache Shiro 框架在Web 系统的安全应用研究梁清华,胡安明(广州理工学院,广东广州510540)摘要:Web 系统中中用户授权访问随着互联网技术的不断发展,Web 安全也成为信息系统开发建设过程中的需要重点关注的内容之一。

本文结合Apache Shiro 框架,探讨在Web 系统中如何应用Apache Shiro 框架,来提高系统安全性、健壮性;为信息系统安全性建设提供思路。

关键词:Apache Shiro ;RBAC 模式;信息系统安全中图分类号:TP311文献标识码:A文章编号:1009-3044(2021)06-0052-02开放科学(资源服务)标识码(OSID ):1引言随着互联网技术的发展,各类信息系统从人们的工作与生活,到国家的经济建设扮演着越来越重要的角色。

如何确保信息系统安全,是信息系统运行的重要基础;因此信息系统安全也是信息系统的重要研究内容。

按Web 信息系统安全策略可分为:DAC 自主式访问控制策略、ACL 访问控制策略、MAC 强制访问控制策略、RBAC 基于角色访问控制策略;其中RBAC 基于角色访问控制策略使用较为广泛。

本文以Web 信息系统中RBAC 基于角色访问控制策略进行研究,探讨使用Apache Shiro 技术下,如何实现基于角色-权限-资源相结合的访问控制方法。

2Apache Shiro 框架Shiro 源自JSecurity 项目,2008年加入Apache 基金会,成为Apache 基金会下的一个基于Java 开源安全开发框架,Shiro 采用模块化设计,具有良好的健壮性和易用性,Apache Shiro 框架提供了身份验证、访问授权、数据加密、会话管理等一系列安全管理模式,能为各类信息系统提供安全解决方案,是目前业界JavaEE 平台广泛使用安全技术框架。

Apache Shiro 框架主要由Authentication 、Authorization 、Session Management Cryptography 四部分组成。

shiro的常用注解

shiro的常用注解

shiro的常用注解一、引言Shiro是一个广泛使用的安全框架,它提供了强大的身份认证、授权和会话管理功能。

在Shiro中,注解是一种常用的机制,用于配置和定制应用程序的安全行为。

本文档将介绍Shiro中常用的注解,帮助读者更好地理解和使用Shiro框架。

二、常用注解介绍1. `@RequiresAuthentication`:该注解用于指示该方法必须通过身份认证才能执行。

在方法上添加此注解后,只有已通过身份认证的用户才能调用该方法。

2. `@RequiresGuest`:该注解用于指示该方法只允许未通过身份认证的用户执行。

在方法上添加此注解后,只有未通过身份认证的用户才能调用该方法。

3. `@SkipPermission`:该注解用于指示该方法无需进行权限检查。

在方法上添加此注解后,该方法将绕过权限检查,无论用户是否有执行该方法的权限。

4. `@Authenticated`:该注解用于指示另一个方法或类必须在身份认证完成后才能执行。

在需要等待身份认证的方法上添加此注解,可以确保只有经过身份认证的用户才能进入相关逻辑。

5. `@SessionValidation`:该注解用于指定一个方法,当会话创建时会自动调用该方法进行验证。

可以在方法上添加此注解,并在其中编写必要的验证逻辑。

6. `@Access`:该注解用于控制对资源的访问,支持多种控制方式,如需要验证用户角色、时间限制等。

通过设置不同的属性,可以实现不同的访问控制逻辑。

7. `@AuthenticatedUser`:该注解用于指定已通过身份认证的用户作为方法的参数或返回值。

可以在方法参数上添加此注解,以便在方法执行时自动将已认证的用户传递给方法。

三、使用示例以下是一个使用Shiro注解的示例代码:```javaimportorg.apache.shiro.authz.annotation.RequiresAuthentication;import org.apache.shiro.authz.annotation.RequiresGuest;import org.apache.shiro.authz.annotation.SkipPermission;import org.apache.shiro.session.Session;import able;importorg.springframework.beans.factory.annotation.Autowired;import ponent;@Componentpublic class UserService implements Nameable {@Autowiredprivate Session session;// 示例方法1:必须通过身份认证才能执行@RequiresAuthenticationpublic void method1() {// 执行需要身份认证的逻辑}// 示例方法2:只允许未通过身份认证的用户执行@RequiresGuestpublic void method2() {// 执行不需要身份认证的逻辑}// 示例方法3:跳过权限检查的接口方法@SkipPermission("viewDetails")public void method3() {// 执行需要验证权限的方法,无需检查是否具有“viewDetails”权限}}```四、总结本文档介绍了Shiro框架中常用的注解,包括`@RequiresAuthentication`、`@RequiresGuest`、`@SkipPermission`等。

Apache-ShiroCacheManager整合Redis提高性能

Apache-ShiroCacheManager整合Redis提高性能
原有问题
解决:在自定义CustomRealm中修改 doGetAuthorizationInfo 方法
原有String username = (String)principals.getPrimaryPrincipal(); User user = userService.findAllUserInfoByUsername(username);
授权的时候每次都去查询数据库对于频繁访问的接口性能和响应速度比较慢所以使用缓存
控制流程图
Apache-ShiroCacheManager整合 Redis提高性能
背景
授权的时候每次都去查询数据库,对于频繁访问的接口,性能和响应速度比较慢,所以使用缓存
添加依赖
<!-- shiro+redis缓存插件 -->

改为:
doGetAuthenticationInfo方法 原有return new SimpleAuthenticationInfo(username, user.getPassword(), this.getClass().getName()); 改为:
源码地址: 完成!!!
<dependency> <groupId>org.crazycake</groupId>
<artifactId>shiro-redis</artifactId> <version>3.1.0</version> </dependency>
配置
由控制图可以看出,所有组件都是由securityManager管理的,所以必须将CacheManager配置到SecurityManager中

ApacheShiro反序列化漏洞复现(CVE-2016-4437)

ApacheShiro反序列化漏洞复现(CVE-2016-4437)

ApacheShiro反序列化漏洞复现(CVE-2016-4437)漏洞描述Apache Shiro是⼀个Java安全框架,执⾏⾝份验证、授权、密码和会话管理。

只要rememberMe的AES加密密钥泄露,⽆论shiro是什么版本都会导致反序列化漏洞。

漏洞原理Apache Shiro框架提供了记住我(RememberMe)的功能,关闭了浏览器下次再打开时还是能记住你是谁,下次访问时⽆需再登录即可访问。

Shiro对rememberMe的cookie做了加密处理,shiro在CookieRememberMeManaer类中将cookie中rememberMe字段内容分别进⾏序列化、AES加密、Base64编码操作。

在识别⾝份的时候,需要对Cookie⾥的rememberMe字段解密。

根据加密的顺序,不难知道解密的顺序为:获取rememberMe cookiebase64 decode解密AES(加密密钥硬编码)反序列化(未作过滤处理)但是,AES加密的密钥Key被硬编码在代码⾥,意味着每个⼈通过源代码都能拿到AES加密的密钥。

因此,攻击者构造⼀个恶意的对象,并且对其序列化,AES加密,base64编码后,作为cookie的rememberMe字段发送。

Shiro将rememberMe进⾏解密并且反序列化,最终造成反序列化漏洞。

漏洞复现1、进⼊vulhub-master/shiro/CVE-2016-4437⽬录下2、docker环境启动docker-compose up -d3、浏览器访问http://192.168.2.147:80804、使⽤Shiro_exploit的poc进⾏漏洞利⽤python3 shiro_exploit.py -t 3 -u http://192.168.2.147:8080 -p "touch a.txt"5、成功在服务器创建a.txt⽂件利⽤nc反弹shell通过Runtime.getRuntime().exec()执⾏命令的有效负载有时会失败。

通用权限管理系统开发文档

通用权限管理系统开发文档

通用权限管理系统开发文档部门:地理信息部作者:王立彪版本:1.0时间:2017-01-13目录1. 简单模型描述 (1)1.1. E-R 图 (1)1.2. 表格清单 (1)1.3. 外键清单 (2)1.4. 视图清单 (2)1.5. 序列清单 (3)2. 完全模型描述 (3)2.1. E-R 图 (3)2.2. 表格清单 (4)2.2.1. 表格shiro_user (系统用户表) (4)2.2.2. 表格shiro_role (系统角色表) (4)2.2.3. 表格shiro_dept (系统部门表) (4)2.2.4. 表格shiro_resource (系统资源表) (5)2.2.5. 表格shiro_permission (系统权限表) (5)2.2.6. 表格shiro_group (系统组表) (5)2.2.7. 表格shiro_user_role (系统用户与角色关系表) (5)2.2.8. 表格shiro_role_resource (系统角色与资源关系表) (6)2.2.9. 表格shiro_role_permission (系统角色与权限关系表) (6)2.2.10. 表格shiro_group_user (系统组与用户关系表) (6)2.2.11. 表格shiro_reource_permission (系统资源与权限关系表) (6)2.2.12. 表格shiro_group_role (系统组与角色关系表) (6)2.2.13. 表格shiro_linecese (系统许可证表) (7)2.2.14. 表格shiro_machine_binding (系统机器绑定表) (7)2.2.15. 表格shiro_ras_keys (系统非对称加密秘钥表) (7)2.3. 外键清单 (7)2.3.1. 外键FK_SHIRO_GR_REFERENCE_SHIRO_..D..E (7)2.3.2. 外键FK_SHIRO_GR_REFERENCE_SHIRO_..G...R .. (8)2.3.3. 外键 ................... FK_SHIRO_GR_REFERENCE_SHIRO_..R...O82.3.4. 外键 ................... FK_SHIRO_GU_REFERENCE_SHIRO_.G...R92.3.5. 外键FK_SHIRO_GU_REFERENCE_SHIRO_..U...S .. (9)2.3.6. 外键FK_SHIRO_MB_REFERENCE_SHIRO._..L..I (9)2.3.7. 外键FK_SHIRO_MB_REFERENCE_SHIRO_.R...K .. (10)2.3.8. 外键FK_SHIRO_RE_REFERENCE_SHIRO_..P...E .. (10)2.3.9. 外键 ................... FK_SHIRO_RE_REFERENCE_SHIRO._..R..E112.3.10. 外键 .................... F K_SHIRO_RO_REFERENCE_SHIRO_..D..E112.3.11. 外键 ................... FK_SHIRO_RP_REFERENCE_SHIRO._..P..E122.3.12. 外键 .................... F K_SHIRO_RP_REFERENCE_SHIRO_.R...O122.3.13. 外键 ................... F K_SHIRO_RR_REFERENCE_SHIRO._..R...E122.3.14. 外键 ....................FK_SHIRO_RR_REFERENCE_SHIRO_.R...O132.3.15. 外键FK_SHIRO_UR_REFERENCE_SHIRO_..R...O (13)2.3.16. 外键FK_SHIRO_UR_REFERENCE_SHIRO_.U...S (14)2.3.17. 外键 .................... FK_SHIRO_US_REFERENCE_SHIRO_..D..E142.4. 视图清单 (15)2.4.1. 视图view_shiro_user_resource (15)2.4.2. 视图view_shiro_user_role_permission (16)2.5. 序列清单 (17)2.5.1. 序列SHIRO_USER_ID_SEQ (17)2.5.2. 序列SHIRO_ROLE_ID_SEQ (17)2.5.3. 序列SHIRO_GROUP_ID_SE.Q (18)2.5.4. 序列SHIRO_RESOURCE_ID_SE...Q (18)2.5.5. 序列SHIRO_PERMISSION_ID_SE.Q (18)2.5.6. 序列SHIRO_LINECESE_ID_SE..Q (18)2.5.7. 序列SHIRO_RSA_KEYS_ID_SE..Q (18)2.5.8. 序列SHIRO_MACHINE_BINDING_ID_SE.Q (18)3. 配置手册 (18)4. 系统引入工程模板 (18)1. 简单模型描述1.1. E-R 图1.2. 表格清单名称描述shiro_user系统用户表shiro_role系统角色表 shiro_dept系统部门表N ;.J71■沁至 Oj-w・掙—轉 Ker-w.u.1•屍〜::•二酬怡IW 4WHY.«W. FEWJUtWid L _ 沁i 」 '-ueyiO 啊 MV二口皿 皐rm 左左: 再!Fd\iKW SI :nJ-!'I AEXU ;UE.FUIlf '-itSAK曙:w*_b .:w臼 3«cd.iJAUKT^J Lil WS一dlhXLJ!E-3auT4SS^[G-:!*_.:■F.KIK:HHVQMI IMUCIH* 皿 i>BAJ = 7 T I aTJCCVu;:・亜. 亠 tF• 2 二沁:£ :>.\1 ;» VijCili : w .…I 」. r.iiKJ ..t=5T、Tfr! ■StT* 14: f 佩其u_=i ■: 畀 idJ.1 z.41£■>“Mg : wrs-1»_;d:t>f-.•J M 丄"Li <u m;l44M4K 砂. ■1 馬 1A.□XLZJ :J =-=»4-==1!wttl >P r:L*_l ± TJMEEJL :3 >:!T3JS :;-二 !>*_・•・ -・•!■.・些■::■:泌I 3E 『朋KH LM,.: TiaS£B ;4« 煥,jhiE^r7T =■_;_! d T.-CJ ; ; 1: FtZ- .;u_:i 1^.135 i Hi ifa>STLCE J ITiF-m tJE ±ia 3=cr=AMUThifie- ihiLtwfl iEKT_lS IT •热Ji+UE3^|iL>i a証WSji : :St.:尸fiLrj-ELlcr 5■1图1-1整体E-RI,pi^DIAZaiMirMlLl-FPIWH ti±™-_=3 iT_ral H -1.3. 外键清单1.4. 视图清单1.5. 序列清单名称描述SHIRO_USER_ID_SEQ 系统用户表主键序列SHIRO_ROLE_ID_SEQ 系统角色表主键序列SHIRO_GROUOP_ID_SEQ 系统组表主键序列SHIRO_RESOURCE_ID_SEQ 系统资源表主键序列SHIRO_PERMISSION_ID_SEQ 系统权限表主键序列SHIRO_LINECESE_ID_SEQ 系统许可证表主键序列SHIRO_RSA_KEYS_ID_SEQ 系统非对称加密秘钥表主键序列SHIRO MACHINE BINDING ID SEQ 系统机器绑定表主键序列2. 完全模型描述2.1. E-R图图2-1整体E-R™=u=>_iri TW1 .: tfUj 护讥七^LEOflObMi 4ka>IHM.HF!vjnmu! 沪a-tern PQ dwci*-SWI•am a■i 昂.H祈I jnpnrfWWtVH ft器計盘咒K沁:客工山“1- FiVIl y?*i=c ■-kziiiiz ®K-fT::NH.4II ;l>ax^=r=-:if:=^II -£_■: 4 呀[血<fU> IFJE' .» gn |WHM:«r L>:TiaS£E:或Ek:■■ ■STLCE J UE;Biurr D-at > w tr-hfiaii L M Z ■ E y-=u4 «W! L I tM"t・ES±r^_=3 «T_rnj»—11- : TX:ji-d4UtLM' 31£电欣fFe-Bl CUIKcLr-a-E-Le CJE-r.VEIEt£d K:iii!NI,■- i:IRCi»itTbTie:LS叩L・Ff・MU^mj;■t.lW L5fc lHai,«,"U?l MH22表格清单221.表格shiro_user (系统用户表)2.2.2. 表格shiro_role (系统角色表)2.2.3. 表格shiro_dept (系统部门表)224.表格shiro_resource (系统资源表)225.表格shiro_permission (系统权限表)2.2.6.表格shiro_group (系统组表)2.2.7.表格shiro_user_role (系统用户与角色关系表)228.表格shiro_role_resource (系统角色与资源关系表)229.表格shiro_role_permission (系统角色与权限关系表)2.2.10. 表格shiro_group_user (系统组与用户关系表)2.2.11. 表格shiro_reource_permission (系统资源与权限关系表)2.2.12. 表格shiro_group_role (系统组与角色关系表)2213. 表格shiro_linecese (系统许可证表)2214. 表格shiro_machine_binding (系统机器绑定表)2.2.15. 表格shiro_ras_keys (系统非对称加密秘钥表)2.3. 外键清单2.3.1. 夕卜键FK_SHIRO_GR_REFERENCE_SHIRO_DE 2.3.1.1 外卜键FK_SHIRO_GR_REFERENCE_SHIF的描述WMWG^IHS_39N3d3d3d_d9_0dlHS_Xd W#S'k£'S聯场乙oy_oyiHS_3ON3y3d3y_yo_oyiHS_>id w# e e s_3ON3y3d3y_yo_oyiHS_>id w# s e syo_oyiHSWMWG^IHS_39N3d3d3d_d9_0dlHS_Xd W#S'k£'Sn0dlHS39N3d3d3d ai/\l0dlHS>1d^O^IHS_39N3d3d3d_ai/\l_0dlHS_Xd W#k9'£'S n_oyiHS_3ON3y3d3y_ai/\i_oyiHS_>id w# 9£zsn_oyiHS_3ON3y3d3y_no_oyiHS_>id w# s c syo OdlHS 3ON3d3d3y no OdlHS MT w# P£Z a^JOdlHS_39N3d3d3d_n9_OdlHS_Xd^OWIHS_39N3d3d3d_3d_0dlHS_Xd W#k8'£'S3d_oyiHS_3ON3y3d3y_3y_oyiHS_>id w# s c sWMS®royiHs_39N3d3d3d_ai/\i_odiHs_xd 聯q” 乙上£乙WfOyiHS_39N3d3d3d_ai/\l_OdlHS_Xd W#kZ'£'S>iy_oyiHS_3ON3y3d3y_ai/\i_oyiHS_>id w# z£zWM^B&^IHS_39N3d3d3d_ai/\l_OdlHS_Xd W#S'9'£'S3a_oyiHS_3ON3y3d3y_oy_oyiHS_>id w# OL CS_oyiHS_3ON3y3d3y_3y_oyiHS_>id w# e c s3yWMltB&WIHS_39N3d3d3d_3d_OdlHS_Xd W#S'8'£'S名称 FK_SHIRO_RR_REFERENCE_SHIRO_RE2311.夕卜键 FK SHIRO RP REFERENCE SHIRO PE2311.1. 夕卜键 FK_SHIRO_RP_REFERENCE_SHlRO 描PE2.3.11.2.夕卜键 FK_SHIRO_RP_REFERENCE_SHIRO 连接清单2.3.12.夕卜键 FK_SHIRO_RP_REFERENCE_SHIRO_RO夕卜键 FK_SHIRO_RP_REFERENCE_SHIR 的描O2.3.12.2.夕卜键 FK_SHIRO_RP_REFERENCE_SHIR 的连接清单2.3.12.1.2.3.13. 夕卜键FK_SHIRO_RR_REFERENCE_SHIRO_RE 2.3.13.1. 夕卜键FK_SHIRO_RR_REFERENCE_SHIF的描述名称FK_SHIRO_RR_REFERENCE_SHIRO_RE子表格 父表格外键列shiro_role_resource shiro_resource resource_id23132 夕卜键 FK_SHIRO_RR_REFERENCE_SHIRO 连接回青单2314.夕卜键 FK_SHIRO_RR_REFERENCE_SHIRO_RO2.3.14.1. 夕卜键 FK_SHIRO_RR_REFERENCE_SHIR 的描述2.3.14.2. 夕卜键 FK_SHIRO_RR_REFERENCE_SHIR 的连RO 青单2.3.15.夕卜键 FK_SHIRO_UR_REFERENCE_SHIRO_RO2.3.15.1. 夕卜键 FK_SHIRO_UR_REFERENCE_SHIR 的描述23152 夕卜键 FK_SHIRO_UR_REFERENCE_SHIF 的连接清单2316.夕卜键 FK_SHIRO_UR_REFERENCE_SHIRO_US2316.1.夕卜键 FK SHIRO UR REFERENCE SHIF 的描述2.3.16.2.夕卜键FK_SHIRO_UR_REFERENCE_SHIRO 连接清单2.3.17.夕卜键 FK_SHIRO_US_REFERENCE_SHIRO_DE2.3.17.1. 夕卜键 FK_SHIRO_US_REFERENCE_SHIF 的描述2.3.17.2. 夕卜键 FK_SHIRO_US_REFERENCE_SHIF 的连接清单24视图清单2.4.1. 视图view_shiro_user_resource241.1. 视图view_shiro_user_resource的描述2.4.1.2视图view_shiro_user_resource的SQL查询SELECTr. ID, r. TYPE, r.resource,「.priority, r.icon, r.parentid, r. NAME,r.css,「.target, r.is_out, er_id, NULL :: INTEGER AS group」d FROM((shiro_resource rLEFT JOIN shiro_role_resource rr ON ((rr.resource_id = r. ID)))LEFT JOIN shiro_user_role ur ON ((ur.role_id = rr.role_id)))UNION ALLSELECTr. ID, r. TYPE, r.resource, r.priority, r.icon, r.parentid, r. NAME,r.css, r.target, r.is_out, er_id, gr.group_idFROM(((shiro_resource rLEFT JOIN shiro_role_resource rr ON ((rr.resource_id = r. ID)))LEFT JOIN shiro_group_role gr ON ((gr.role_id = rr.role_id)))LEFT JOIN shiro_group_user gu ON ((gu.group_id = gr.group_id)));241.3. 视图view_shiro_user_resource的表格清单2414视图view shiro user resource勺视图列清单2.4.2. 视图view_shiro_user_role_permission242.1. 视图view_shiro_user_role_permissior的描述242.2. 视图view_shiro_user_role_permissior的SQL查询SELECTpr.id, , pr.type, pr.parent_id,pr.permission, pr.priority,pr.role_id ,er_id FROM (SELECT p.id, p.n ame, p.type, p.pare nt_id,p.permissi on, p.priority,rp.role_id FROM shiro_permissi on p ,shiro_role_permissio n rp where p.id=rp.permissi on_idUNION allSELECT p.id, p.n ame, p.type, p.pare nt_id,p.permissio n,p.priority,srr.role_id FROM shiro_permissi on p ,shiro_resource_permissio n srp,shiro_role_resource srrwhere srp.permission_id=p."id" and srr.resource_id=srp.resource_id )pr ,(select gr.role_id,er_id from shiro_group_role gr,shiro_group_user guwhere gr.group_id=gu.group_idUNION allSELECT ur.role_id,er_id from shiro_user_role ur)gsurwhere pr.role_id=gsur.role_id2423视图view_shiro_user_resource的表格清单2424视图view_shiro_user_role_permissior的视图列清单2.5. 序列清单2.5.1. 序列SHIRO_USER_ID_SEQ描述:系统用户表主键序列。

apache shiro的认证流程

apache shiro的认证流程

apache shiro的认证流程Apache Shiro是一个强大且灵活的开源安全认证和授权框架,可用于保护Java应用程序的安全性。

它提供了易于使用的API和清晰的认证流程,使开发者能够轻松地实现用户认证和访问控制。

Apache Shiro的认证流程主要包括以下几个步骤:1. 配置安全策略在开始使用Apache Shiro进行认证之前,首先需要配置应用程序的安全策略。

这些策略包括定义用户的角色和权限,以及指定应用程序的安全规则。

可以通过配置文件或编程方式来定义安全策略。

2. 用户身份验证当用户尝试登录应用程序时,Apache Shiro首先会检查用户提供的身份凭证。

身份凭证可以是用户名/密码组合、API密钥或其他自定义方式。

开发者可以根据应用程序的需求自定义身份认证方法。

3. 身份凭证的匹配验证Apache Shiro将用户提供的身份凭证与事先配置的身份存储进行匹配验证。

身份存储可以是数据库、LDAP、文件或其他类型的数据源。

Shiro提供了各种Realm来处理不同类型的身份存储,并提供了默认的实现。

4. 身份验证过程一旦身份凭证与身份存储进行匹配验证成功,Apache Shiro将创建一个Subject对象来表示已验证的用户。

Subject对象封装了与用户相关的信息和操作,如用户名、角色和权限。

Subject对象可以在应用程序的任何地方使用,以便进行访问控制和安全操作。

5. 认证结果处理认证结果可以根据业务需求进行处理。

如果认证成功,可以将用户重定向到特定页面或执行其他操作。

如果认证失败,可以向用户显示错误消息并提供重新尝试登录。

6. 访问控制一旦用户通过身份验证,Apache Shiro还可以用于实现访问控制。

开发者可以定义角色和权限,并在应用程序中使用注释或编程方式进行访问控制。

Shiro提供了各种功能强大的注解,如@RequiresAuthentication、@RequiresRoles和@RequiresPermissions,以简化访问控制的实现。

ApacheShiro安全框架在技术转移服务系统中的应用

ApacheShiro安全框架在技术转移服务系统中的应用

Ap p l i c a t i o n o f Apa c h e S h i r o S e c u r i t y Fr a me wo r k i n Te c h no l o g y Tr a n s f e r S e r v i c e s Sy s t e m

按照 M V C的框架 结构 进行 规划 。在安 全方 面 采用 A . p a c h e S h i r o 体 系作 为用 户 登 录 、 用 户 认 证 等方 面 的架 构 。本文通过 A p a c h e S h i r o与 S p i r n g 框 架 的整合 方法 , 阐述 A p a c h e S h i m 安全框架在技术服务系统 中的应用 。
一பைடு நூலகம்
1 Ap a c h e S h i r o体 系结 构
A p a c h e S h i r o 是 功 能非 常强 大而 又灵 活 的开源 框 架, 该 框架 能够 简捷 地处 理身 份认 证 、 授权、 企业 会 话
全 问题 显 得尤 为 重要 。信 息 安全 关 系 到信 息 的正 确
为各 类技 术 成果 、 专利 提供 方 和企业 需 求方 为服 务对 象, 并以创建 、 管理和定制的信息 内容 网站为 目标的 个 可 持续 发展 的 网络 平 台软 件 系 统 , 为 技术 成 果 、 专 利转 移转 化 等信 息 网站 实施 需 要 提 供 快 速 解 决 方 案 。基 于此 开 发 的江 西 省 技术 转 移 服务 系 统 中 的安
Y A N G Y u n — p i n g . WU Z h i - j u n
( J i a n g x i I n s t i t u t e o f C o m p u t i n g T e c h n o l o g y ,N a n c h a n g 3 3 0 0 0 3 , C h i n a )

将 Shiro 作为应用的权限基础 五:SpringMVC+Apache Shiro+JPA(hibernate)整合配置

将 Shiro 作为应用的权限基础 五:SpringMVC+Apache Shiro+JPA(hibernate)整合配置
实现了首页隐藏的目的,详见spring-mvc.xml
-->
<!--
<welcome-file-list> <welcome-file>login.jsp</welcome-file>
</welcome-file-list>
-->
</web-app>
applicationContext.xml
<?xmlversion="1.0"encoding="UTF-8"?>
</listener>
<!--实例化Spring容器-->
<!--
应用启动时,该监听器被执行,它会读取Spring相关配置文件,
其默认会到WEB-INF中查找applicationContext.xml
-->
<listener>
<listener-class>
er
xmlns:cache="/schema/cache"
xmlns:jaxws="/jaxws"
xsi:schemaLocation=" /schema/beans /schema/beans/spring-beans-3.1.xsd
<param-value>classpath*:applicationContext*.xml</param-value>
</context-param>
<!--防止发生java.beans.Introspector内存泄露,
应将它配置在ContextLoaderListener的前面-->

shiro 安全框架-最好的中文配置文档

shiro 安全框架-最好的中文配置文档
现在有一张表的描述实体类,以及数据访问:
@Entity @Table(name="TB_RESOURCE") public class Resource implements Serializable {
//主键 id @Id private String id; //action url private String value; //shiro permission; private String permission; //------------------Getter/Setter---------------------// }
apache shiro 与 spring 整合、动态 filterChainDefinitions、以及认证、授

apache shiro 是一个安全认证框架,和 spring security 相比,在于他使用了比较简洁易懂的 认证和授权方式。其提供的 native-session(即把用户认证后的授权信息保存在其自身提供 Session 中)机制,这样就可以和 HttpSession、EJB Session Bean 的基于容器的 Session 脱耦,到和客户端应用、Flex 应用、远程方法调用等都可以使用它来配置权限认证。 在 exit-web-framework 里的 vcs-admin 例子用到该框架,具体使用说明可以参考官方帮助文档。 在这里主要讲解如何与 spring 结合、动态创建 filterchaindefinitions、以及认证、授权、和 缓存处理。
<!-- Spring ApplicationContext 配置文件的路径,可使用通配符,多个路径用,号分隔 此参数用于后 面的 Spring Context Loader --> <context-param>
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Apache Shiro Reference DocumentationIntroduction to Apache ShiroWhat is Apache Shiro?Apache Shiro是一个强大而灵活的开源安全框架,它干净利落地处理身份认证,授权,企业会话管理和加密。

Apache Shiro的首要目标是易于使用和理解。

安全有时候是很复杂的,甚至是痛苦的,但它没有必要这样。

框架应该尽可能掩盖复杂的地方,露出一个干净而直观的API,来简化开发人员在使他们的应用程序安全上的努力。

以下是你可以用Apache Shiro所做的事情:∙验证用户来核实他们的身份∙对用户执行访问控制,如:∙判断用户是否被分配了一个确定的安全角色∙判断用户是否被允许做某事∙在任何环境下使用Session API,即使没有Web或EJB容器。

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

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

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

∙为没有关联到登录的用户启用"Remember Me"服务…以及更多——全部集成到紧密结合的易于使用的API中。

Shiro视图在所有应用程序环境下实现这些目标——从最简单的命令行应用程序到最大的企业应用,不强制依赖其他第三方框架,容器,或应用服务器。

当然,该项目的目标是尽可能地融入到这些环境,但它能够在任何环境下立即可用。

Apache Shiro FeaturesApache 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":在会话中记住用户的身份,所以他们只需要在强制时候登录。

Apache Shiro TutorialYour First Apache Shiro Application如果你从未使用过Apache Shiro,这个简短的教程将会向您展示如何建立一个由Apache Shiro担保的初始的及非常简单的应用程序。

一路上我们将讨论Shiro的核心概念来帮助你熟悉Shiro的设计和API。

当你遵循本教程时,如果你确实不想编辑文件,你可以得到一个几乎相同的实例应用程序并按照你的意愿引用它。

选择一个位置:∙在Apache Shiro的版本控制库:https:///repos/asf/shiro/trunk/samples/quickstart∙在Apache Shiro的源代码的samples/quickstart目录。

该源代码在Download页面提供下载。

Setup在这个简单的示例中,我们将创建一个非常简单的命令行应用程序,它将会运行并迅速退出,这样你能够获得对Shiro 的API的感受。

该教程需要Java 1.5及更高本。

我们也使用Apache Maven作为我们的构建工具,但当然这不是使用Apache Shiro所必需的。

你可以获取Shiro的jar包并按你喜欢的方式合并到你的应用程序,例如可能是一Apache Ant和Ivy。

对于本教程,请确保你正在使用Maven 2.2.1或更高版本。

你应该能够键入mvn -version命令行提示符,并看到与下面类似的东西:现在,在你的文件系统上创建一个新的目录,例如,shiro-tutorial并在该目录下保存下面的Maven pom.xml文件:The Tutorial class我们将运行一个简单的命令行应用程序,因此,我们需要创建一个拥有public static void main(String[] args)方法的Java 类。

在包含你pom.xml文件的同样目录下,创建src/main/java子目录。

在src/main/java目录下创建具有下面内容的现在不必担心import语句——我们不久将会涉及到它们。

但现在,我们得有一个命令行应用程序“外形”。

该程序所能够做到全部事情是打印出文本"My First Apache Shiro Application"并退出。

Test Run要试用我们的教程应用程序,请在你的教程项目的根目录下执行以下的命令提示符,并键入以下内容:mvn compile exec:java然后你将看到我们的little教程“程序”运行并退出。

你应该会看到与下面相似的一些东西(注意粗体文本,它显示了我们的输出):Run the Applicationlhazlewood:~/projects/shiro-tutorial$ mvn compile exec:java... a bunch of Maven output ...1 [Tutorial.main()] INFO Tutorial - My First Apache Shiro Applicationlhazlewood:~/projects/shiro-tutorial\$我们已经验证了该程序运行成功——现在让我们启用Apache Shiro。

当我们继续本教程的时候,你可以在每次我们添加一些代码后运行mvn compile exec:java来观察我们变化后的结果。

Enable Shiro在应用程序中启用Shiro最先要明白的事情是几乎在Shiro中的每个东西都与一个名为SecurityManager的主要的/核心的组件有关。

对于那些熟悉Java安全的人来说,这是Shiro的SecurityManager概念——它不等同于ng.SecurityManager。

虽然我们将在Architecture章节详细的涉及到Shiro的设计,但现在了解Shiro的SecurityManager是应用程序的Shiro 环境的核心及每个应用程序中必须存在一个SecurityManager是很有益处的。

因此,在我们的教程应用程序中第一件要做的事情就是配置SecurityManager实例。

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

为此,Shiro通过基于文本的INI配置文件提供了一个默认的"共性(common denominator)"解决方案。

近来人们已经相当厌倦了使用笨重的XML文件,且INI文件易于阅读,使用简单,依赖性低。

你稍后将会看到有了对象导航图的简单理解,INI文件能够有效地被用来配置简单的对象图,如SecurityManager。

shiro.ini因此,我们将为这个简单的应用程序使用INI文件来配置Shiro SecurityManager。

首先,在pom.xml所在的同一目录下创建src/main/resources目录。

然后在新目录下创建包含以下内容的shiro.ini文件:如你所见,这个配置基本上建立了一小组静态用户帐户,对于我们的第一个应用程序已经足够了。

在后面的章节中,你将看到我们如何使用更复杂的用户数据源,如关系数据库,LDAP的AcitveDirectory,以及更多。

Referencing the Configuration现在我们已经定义好了一个INI文件,我们可以在我们的教程应用程序类中创建SecurityManager实例了。

改变main 方法来反映以下的更新内容:好了,在仅仅添加了3行代码后,Shiro就在我们的简单应用程序中启用了!很容易是吧?轻松地运行mvn compile exec:java,并看到这一切仍然运行成功(由于Shiro的默认调试日志或更低版本,你将不会看到任何的Shiro日志消息——如果在启动和运行没有报错,那么你知道一切仍然正常)。

这里是上面增加的代码所做的:1.我们使用Shiro的IniSecurityManager实现来提取我们的shiro.ini文件,它位于classpath的根目录。

该实现反映了Shiro对工厂设计模式的支持。

classpath: 前缀是一个资源定位符,用来告诉shiro去哪加载ini文件(其他前缀,如url:和file:也同样被支持)。

2.factory.getInstance()方法被调用,它来解析INI文件并返回反映该配置的SecurityManager实例。

3.在这个简单的例子中,我们把SecurityManager设置为一个静态的(memory)单例,能够跨JVM访问。

但请注意,这是不可取的,如果你在单个的JVM只中会有不只一个启用Shiro的应用程序。

对于这个简单的例子而言,这是没有问题的,但更为复杂的应用程序环境通常将SecurityManager置于应用程序特定的存储中(如在Web应用中的ServletContext或Spring,Guice后JBoss DI容器实例)。

Using Shiro现在我们的SecurityManager已经设置好并可以使用了,现在我们能够开始做一些我们真正关心的事情——执行安全操作。

当保护我们的应用程序时,我们对自己可能提出的最为相关的问题是“当前用户是谁”或“当前用户是否被允许做XXX”。

当我们编写代码或设计用户接口时,问这些问题是很常见的:应用程序通常是基于用户的背景情况建立的,且你想基于每个用户标准体现(保障)功能。

相关文档
最新文档