`
peterwanghao
  • 浏览: 128860 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Apache Shiro 配置

 
阅读更多

Shiro 被设计成能够在任何环境下工作,从最简单的命令行应用程序到最大的企业群集应用。由于环境的多样性,使得许多配置机制适用于它的配置。Shiro的SecurityManager 实现及所支持的组件都是兼容JavaBean的。这使得Shiro几乎能使用任何配置格式,如regular Java,XML(Spring,JBoss, Guice,等等),YAML,JSON,Groovy Builder markup,以及更多的配置。

2.3.1 创建SecurityManager

SecurityManager是Shiro的心脏,主要是做为一个轻量级的“容器”组件,委托计划所有的行为到嵌套的或包含的其他组件。因此应用程序一般都需要配置一个SecurityManager。

创建一个SecurityManger并把它提供给应用程序的绝对的最简单的方法是创建一个org.apache.shiro.mgt.DefaultSecurityManager并把它链到代码中。例如:

Realm realm = //instantiate or acquire a Realm instance. We'll discuss Realms later.

SecurityManager securityManager = new DefaultSecurityManager(realm);

//Make the SecurityManager instance available to the entire application via static memory:

SecurityUtils.setSecurityManager(securityManager);

Shiro 的SecurityManager 实现实质上是一个特定安全的嵌套组件中的模块化对象图。因为它们也是兼容JavaBean的,你可以调用任何嵌套组件的getter 和setter 方法来配置SecurityManager以及它的内部对象图。

例如,如果你想配置SecurityManager实例来使用自定义的SessionDAO 来定制Session Management,你可以通过嵌套的SessionManager 的setSessionDAO 方法直接设置SessionDAO:

...

DefaultSecurityManager securityManager = new DefaultSecurityManager(realm);

SessionDAO sessionDAO = new CustomSessionDAO();

((DefaultSessionManager)securityManager.getSessionManager()).setSessionDAO(sessionDAO);
...

除了象上述硬编码的方式外也支持文本配置, Shiro 支持INI 格式来构建SecurityManager 对象图及其支持的组件。INI 易于阅读, 易于配置,且设置简单,适合大多数应用程序。

我们能够从一个INI 资源路径创建SecurityManager 实例。我们可以从文件系统,classpath,或分别拥有前缀file:,classpath:,或url:的URL 中获取资源。本例采用Factory 提取classpath 根目录下的shiro.ini 文件并返回SecurityManager实例:

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.util.Factory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.config.IniSecurityManagerFactory;

...

Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
SecurityManager securityManager = factory.getInstance();
SecurityUtils.setSecurityManager(securityManager);

如果你需要,INI 配置也可以通过org.apache.shiro.config.Ini 类使用编程方式创建。Ini 类的功能与JDK java.util.Properties 类相似,但通过section 名称,它同时还支持分割。例如:

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.util.Factory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.config.Ini;
import org.apache.shiro.config.IniSecurityManagerFactory;

...

Ini ini = new Ini();
//populate the Ini instance as necessary
...
Factory<SecurityManager> factory = new IniSecurityManagerFactory(ini);
SecurityManager securityManager = factory.getInstance();
SecurityUtils.setSecurityManager(securityManager);

2.3.2 INI配置项

INI基本上是一个文本配置,包含了不同section的键/值对。每个section是唯一命名的,键只是在section中唯一的,而不是在整个配置中(此处与JDK属性不同)。每个section都可以被看作单一属性定义。

注释行是以#号或;号开始。

[main]

配置应用程序的SecurityManager实例及任何它的依赖组件(如Realms)。例如:

[main]
sha256Matcher = org.apache.shiro.authc.credential.Sha256CredentialsMatcher

myRealm = com.company.security.shiro.DatabaseRealm
myRealm.connectionTimeout = 30000
myRealm.username = jsmith
myRealm.password = secret
myRealm.credentialsMatcher = $sha256Matcher

securityManager.sessionManager.globalSessionTimeout = 1800000

简单的原始属性,通过等号来指定。

如果你需要设置的值不是一个原始值,而是另一个对象呢?那么,你可以使用$符号来引用之前定义的实例。

在INI 配置行的等号左侧使用点号,你可以遍历对象图来得到想设置的最终的对象/属性。

对于字节数组值,默认的是使用Base64编码字符串,然而,如果你喜欢使用16 进制编码,你必须在字符串前加上0x前缀。

[users]

允许你定义一组静态的用户帐户。这在大部分拥有少数用户帐户或用户帐户不需要在运行时被动态地创建的环境下是很有用的。

[users]
admin = secret
lonestarr = vespa, goodguy, schwartz
darkhelmet = ludicrousspeed, badguy, schwartz

在[users]section 中的每行都必须保证是下面的格式:

username =password, roleName1, roleName2, …, roleNameN

l 在等号左边的值是用户名

l 在等号右边的第一个值是用户的秘密。密码是必须的。

l 任何在密码后用逗号分隔的值都是分配给该用户的角色名。角色名是可选的。

如果你不想[users]section 中密码是纯文本的,你可以使用你喜爱的散列算法(MD5,Sha1,Sha256,等等)来进行加密,并使用生产的字符串作为密码值。默认情况下,密码字符串是16 进制编码,但可以使用Base64 编码代替16进制编码来配置。

一旦你指定了文本密码散列值,你得告诉Shiro 这些都是加密的。你可以通过配置在[main] section 中隐式地创建iniRealm来使用合适的CredentialsMatcher 实现来对应到你所指定的哈希算法:

[roles]

允许你把定义在[users]section 中的角色与权限关联起来。这在大部分拥有少数用户帐户或用户帐户不需要在运行时被动态地创建的环境下是很有用的。例如:

[roles]
# 'admin' role has all permissions, indicated by the wildcard '*'
admin = *
# The 'schwartz' role can do anything (*) with any lightsaber:
schwartz = lightsaber:*
# The 'goodguy' role is allowed to 'drive' (action) the winnebago (type) with
# license plate 'eagle5' (instance specific id)
goodguy = winnebago:drive:eagle5

在[roles]section 中每个配置行必须定义一个映射以下格式的角色到权限的键/值:rolename =permissionDefinition1, permissionDefinition2, … , permissionDefinitionN

permissionDefinition是一个任意的字符串,但大多数人将会使用符合org.apache.shiro.authz.permission.WildcardPermission格式的字符串,为了易用性和灵活性。

[urls]

在你的应用程序中定义自适应过滤器链来匹配URL 路径。例如:

[urls]

/index.html = anon
/user/create = anon
/user/** = authc
/admin/** = authc, roles[administrator]
/rest/** = authc, rest
/remoting/rpc/** = authc, perms["remote:invoke"]

等号左边是一个与Web 应用程序上下文根目录相关的Ant 风格的路径表达式。等号右边为过滤器链。

例如,假设你有如下的[urls]行:

/account/** = ssl, authc

此行表明,“任何对应用程序的/account 或任何它的子路径(/account/foo,account/bar/baz,等等)的请求都将触发'ssl,authc'过滤器链”。



分享到:
评论

相关推荐

    Apache Shiro教程

    通过这个Apache Shiro教程,你可以学习到如何构建安全的Java应用,了解Shiro的配置和用法,以及如何在实际项目中实施身份验证、授权、会话管理和加密策略。无论你是初学者还是经验丰富的开发者,Shiro都是一个值得...

    Apache shiro 1.13.0源码

    在 web 应用中,可以通过配置 `shiro.ini` 或者 `Web.xml` 来定制过滤器。 6. **Caching**:Shiro 支持缓存管理,可以缓存认证和授权信息,提高性能。 7. **Testing**:源码中包含了测试用例,帮助开发者理解和...

    apache shiro 管理用户权限与数据库交互

    Apache Shiro是一个强大且易用的Java安全框架,它提供了身份验证、授权、加密和会话管理等功能。本文将深入探讨如何使用Apache Shiro管理用户权限,并与数据库进行交互,以便实现动态、灵活的安全策略。 ### 一、...

    Apache_Shiro_使用手册(一)Shiro架构介绍

    ### Apache Shiro 使用手册(一)Shiro架构介绍 #### 一、Shiro简介 Apache Shiro 是一款功能强大且易于使用的 Java 安全框架,它提供了多种安全相关的功能和服务,包括但不限于认证、授权、加密和会话管理。相较...

    SpringBoot + Apache Shiro + Mybatis Plus + Thymeleaf 实现的内容管理系统

    采用SpringBoot + Apache Shiro + Mybatis Plus + Thymeleaf 实现的内容管理系统(附带权限管理),是搭建博客、网站的不二之选。 技术栈:Spring Boot、Apache Shiro、MyBatis-Plus、Alibaba Druid、Redis、MySQL、...

    Apache Shiro 集成-spring

    2. 配置Shiro:创建Shiro配置文件(如shiro.ini或shiro.xml),定义安全策略、过滤器链等。 3. 创建安全组件:包括Subject、Realms(负责从数据源获取用户信息)、Filters(过滤器)等。 4. 集成Spring:通过Spring...

    让Apache Shiro保护你的应用

    1. **易于使用**:Apache Shiro将易用性作为首要目标之一,简化了安全配置和管理流程,使得即使是初学者也能快速上手。 2. **广泛的适用范围**:Shiro能够满足各种类型应用的安全需求,无论是Web应用、移动应用还是...

    Apache shiro权限控制基础配置代码

    以下是一个简单的Shiro配置示例,展示了如何创建 Realm 和配置 Security Manager: ```java public class MyRealm extends AuthorizingRealm { // 实现认证和授权逻辑 } @Configuration public class ShiroConfig...

    spring mvc、apache shiro、mysql 框架搭建,基于maven构建

    3. 实现Apache Shiro的安全配置,如 Realm、Session管理和Filter链,以实现用户认证和授权。 4. 设计数据库模型,编写SQL语句,配置数据源连接,使用ORM框架如MyBatis进行数据操作。 5. 编写Controller层处理HTTP...

    Apache Shiro中文版使用手册

    - **Realm**:领域,充当 Shiro 与应用程序安全数据之间的桥梁,负责从配置的数据源中检索用户及权限信息。 **2.2 其他重要组件** - **Authenticator**:认证器,负责用户的身份验证工作,验证用户提供的凭证信息...

    apache shiro 实例

    Apache Shiro 是一个强大且易用的Java安全框架,它提供了认证、授权、加密和会话管理功能,简化了企业级应用的安全实现。本实例将深入探讨 Apache Shiro 的核心概念和常见用法。 1. **认证**:Shiro 提供了用户身份...

    Apache Shiro 使用手册(五) Shiro 配置说明

    ### Apache Shiro 配置说明详解 #### 一、引言 Apache Shiro 是一个强大且易用的 Java 安全框架,它提供了认证、授权、加密和会话管理等功能,能够帮助开发者轻松地处理非常复杂的安全问题。本文将重点介绍 Shiro ...

    shiro最简单整合版本

    以上就是 Apache Shiro 的最简单整合版本,它涵盖了基本的身份认证、授权流程和配置。然而,实际项目中可能需要考虑更多细节,如会话管理、缓存策略、Web 应用的集成等。Shiro 提供了丰富的 API 和扩展点,可以根据...

    Spring MVC+Mybatis+Ehcache+Apache Shiro+Bootstrap整合开发java仓库管理系统源码

    - 配置Apache Shiro,创建安全配置,定义 Realm 进行身份验证和授权,设置过滤链以控制访问权限。 - 将Bootstrap样式和JavaScript库引入到项目中,根据需求定制和布局前端页面。 这个仓库管理系统源码是一个综合性...

    apache shiro文档

    Apache Shiro 是一个强大且易用的 Java 安全框架,它提供了认证、授权、加密和会话管理功能,可以非常方便地为应用程序提供安全保障。本文档合集包含了多个 PDF 文件,全面覆盖了 Apache Shiro 的核心概念和使用方法...

    整合Apache Oltu 与 Shiro. 提供一个轻量的OAUTH2应用框架

    3. 在Shiro配置中,设置OAuth2过滤器,拦截请求并使用Oltu验证令牌。 4. 在应用程序中,根据需求选择合适的OAuth2 grant类型,如授权码模式或资源所有者密码凭证模式。 5. 对于移动设备,可能还需要配置客户端应用以...

    apache-shiro教程完整版.7z

    Apache Shiro 是一个强大且易用的Java安全框架,提供了认证、授权、加密和会话管理功能,可以非常轻松地开发出足够安全的应用。张开涛的《跟我学Shiro》是一本深入浅出的教程,旨在帮助读者快速掌握Shiro的核心概念...

    spring boot+mybatis+thymeleaf+apache shiro开发面向学习型的后台管理系统

    7. **Shiro配置**:配置Shiro的 Realm,实现用户认证和授权逻辑。 通过以上组件的协同工作,该后台管理系统能够提供用户注册、登录、角色管理、权限分配等功能,为学习资源的管理和共享提供了便捷的平台。同时,...

    Spring Boot+Maven+Spring Data JPA+apache Shiro+Easyui实现通用用户权限管理系统

    本项目基于"Spring Boot+Maven+Spring Data JPA+apache Shiro+Easyui",这些技术栈的选择旨在简化开发过程,提供强大的功能,并确保系统的安全性和用户体验。 1. **Spring Boot**: Spring Boot是Spring框架的简化版...

    shiro1.7.1.zip

    Apache Shiro是一个强大的Java安全框架,它...此外,了解并正确配置Shiro的各个组件,如Realms(用于认证和授权的数据源)、Filters(处理HTTP请求的过滤器)和Cryptography(加密工具),是实现高效且安全应用的关键。

Global site tag (gtag.js) - Google Analytics