`

shiro的隐含变量以及穷人的注入方式(shiro.ini 的解析1)

    博客分类:
  • j2ee
阅读更多

1.shiro有哪些隐含变量可以在shiro.ini里面直接使用呢。

2.shiro.ini的[main]结构里的语句是怎么解析的?

 

首先看第一点:找到 IniSecurityManagerFactory 这个类,这是一个ini安全管理创建工厂,处理ini的逻辑都在这里。首先按照语句

public static void main(String[] args) throws InterruptedException {
		Factory<SecurityManager> factory = new IniSecurityManagerFactory();
		SecurityManager manager = factory.getInstance();
		SecurityUtils.setSecurityManager(manager);
		Subject subject = SecurityUtils.getSubject();
			}

 

先从SecurityManager manager = factory.getInstance();语句入手,找到AbstractFactory类,类里有一个需要实现的方法,这个类采用了模板方法(老外写的代码里有很多实用模板方法的),后面的类也用了模板方法。关键处理的代码直到最{IniSecurityManagerFactory # IniSecurityManagerFactory}里才有展现。

private SecurityManager createSecurityManager(Ini ini) {
        Ini.Section mainSection = ini.getSection(MAIN_SECTION_NAME);
        if (CollectionUtils.isEmpty(mainSection)) {
            //try the default:
            mainSection = ini.getSection(Ini.DEFAULT_SECTION_NAME);
        }
        return createSecurityManager(ini, mainSection);
    }

 

在这个方法中有取得[main] section 的 “MAIN_SECTION_NAME” 。在createSecurityManager方法内部分别调用了两个很关键的方法:

1.  Map<String, ?> defaults = createDefaults(ini, mainSection);
2.  Map<String, ?> objects = buildInstances(mainSection, defaults);

 先创建默认的初始化容器,一个名称为securityManager,和iniRealm的对象被放入map<String, Object>容器中(这两个对象名称是可以在shiro.ini直接使用的,后面再反射里面又发现一个可以使用的变量shiro,以shiro开头的全局设置,所谓全局设置,是遍历map容器,查看对方是否有shiro.*  的 * 名称属性,如果有就设置(设置好后继续遍历,直至map容器遍历完)。非全局设置就是map容器里取得key对应的value对象,设置,对象属性值)。后面代码的实现是关于shiro.ini为啥可以直接使用,以上变量的原因。

 

第二点:实现过程

实现过程在Map<String, ?> objects = buildInstances(mainSection, defaults); 这个方法内部。

基本思路是先把创建对象和设置值分开,创建对象使用反射方式,设置值使用commons-beanutils类库。

shiro使用ReflectionBuilder类来完成这件事,设置值和对象创建是有顺序的,必须先创建了后面才能引用,和编写执行代码的顺序是一样的

 

 

 

分享到:
评论

相关推荐

    shiro-jar.zip

    shiro-all-1.7.1.jar,shiro-aspectj-1.7.1.jar,shiro-cache-1.7.1.jar,shiro-config-core-1.7.1.jar,shiro-config-ogdl-1.7.1.jar,shiro-core-1.7.1.jar,shiro-crypto-cipher-1.7.1.jar,shiro-crypto-core-1.7.1.jar...

    shiro-1.7.1.zip

    1. **shiro-core-1.7.1.jar**: 这是Shiro的核心库,包含了基本的身份验证、授权和会话管理功能。它提供了一套API,开发者可以使用这些API来处理用户的身份验证和权限控制。 2. **shiro-web-1.7.1.jar**: 这个模块...

    shiro1.7.1.zip

    1. **shiro-core-1.7.1.jar**:这是Shiro的核心模块,包含了认证、授权、会话管理和加密等基础功能。如Subject、Realms、Cryptography、Session等概念都包含在这个模块中。 2. **shiro-web-1.7.1.jar**:这个模块是...

    shiro连接redis集群 根据org.crazycake.shiro包改造源码

    1. **RedisClient**:原有的Shiro Redis连接器可能使用了单一的Redis连接,现在可能被替换为一个支持集群的客户端,如JedisCluster或Lettuce,这两个库都支持与Redis集群交互。 2. **Session管理**:`...

    shiro(shiro-all-1.8.0.jar)

    shiro(shiro-all-1.8.0.jar)

    Shiro最新全套在线教程(1.74G)

    08.ini方式检查用户拥有角色.avi 09.ini方式检查用户拥有权限.avi 10.自定义realm检查用户拥有权限.avi 11.shiro授权流程分析.avi 12.web集成-集成原理.avi 13.web集成-项目准备.avi 14.web集成-web.xml解析.avi 15....

    shiro.freemarker.ShiroTags已打包

    例如,你可以使用 `&lt;@shiro.hasPermission 'admin'&gt;` 标签来检查当前用户是否拥有 "admin" 权限,如果拥有,标签内部的内容将被渲染到页面上;如果没有,这部分内容则会被忽略。这极大地简化了视图层的代码,并提高...

    shiro项目基本运行架包以及全部的架包shiro-all.jar

    - **配置**:理解如何在配置文件中设置Shiro的行为,如`shiro.ini`或Java配置。 在实际使用中,你还需要了解如何将Shiro与Spring、MyBatis等其他框架集成,以实现更复杂的业务需求。 总之,Apache Shiro是一个功能...

    ini4idea-172.3317.57-idea中ini文件编辑工具

    在.shiro.xml文件中,我们可能需要引用或配置与.ini文件相关的安全策略。当在IDEA中直接编辑.ini文件时,如果没有专门的支持,代码通常会显示为错误(报红),这是因为IDEA默认不识别.ini文件的语法。 ini4idea插件...

    shiro认证.pdf

    本例中使用的是Ini配置文件(shiro.ini)进行安全管理器(SecurityManager)的配置。以下是典型的Ini配置文件示例: ```ini [main] # 配置SecurityManager,使用默认的Subject工厂 securityManager = org.apache....

    shiro1.7.1全包修补漏洞.rar

    1. **Shiro-aspectj-1.7.1.jar**: 这个JAR文件是Shiro的AspectJ支持模块,它允许开发者使用AspectJ来实现AOP(面向切面编程)的安全控制。例如,可以定义切面来拦截并处理特定的安全操作,如登录检查或权限验证。 2...

    shiro_tool.zip

    学习和使用Shiro,你可以了解如何创建安全的登录系统,如何实现基于角色的权限控制,以及如何管理用户会话。此外,熟悉Shiro的事件监听和缓存机制也能帮助优化性能。在实际项目中,Shiro可以很好地与Spring Boot等...

    shiro使用的jar包

    然后,开发者可以通过编写配置文件(通常是`shiro.ini`)来定义用户、角色和权限,以及指定如何连接到应用程序的数据源。接着,可以在代码中使用Shiro提供的API来进行身份验证和授权操作,如`Subject.login()`进行...

    shiro 权限认证以及授权demo

    Shiro的配置主要在`shiro.ini`或Java配置类中进行。这里可能包含安全相关的配置,如Realm(用于获取用户信息和权限数据的接口实现)、过滤器链定义等。例如: ```ini [main] securityManager.realms = $myRealm ...

    shiro之INI配置详解

    authenticationStrategy = org.apache.shiro.authc.pam.AtLeastOneSuccessfulStrategy authenticator.authenticationStrategy = $authenticationStrategy securityManager.authenticator = $authenticator [realm] ...

    shiro_attack_2.2.zip

    下面我们将深入探讨Apache Shiro的基本概念、常见攻击以及如何防范这些攻击。 **Apache Shiro框架** Apache Shiro的核心组件包括认证、授权、会话管理和加密。认证是验证用户身份的过程,授权则涉及决定用户是否有...

    shiro-shiro-root-1.5.3.zip

    需要注意的是,为了充分利用Shiro的功能,开发者还需要了解Shiro的配置方式,以及如何编写安全拦截器和安全控制器等。 总的来说,Apache Shiro是Java开发中不可或缺的安全工具,它的强大功能和易用性使其成为构建...

    shiro-all-1.2.3.jar

    2. 配置Shiro:创建Shiro配置文件,如shiro.ini,定义安全规则、过滤器链等。 3. 编写Shiro配置类:在Spring MVC应用中,创建一个配置类,通过@Bean注解声明Shiro的相关组件,如SecurityManager、Realm等。 4. ...

    shiro-jar-1.7.0.zip相关资源包

    解决:升級1.7后附件中文路径报400错误的问题 压缩包中包含: shiro-cas-1.7.0.jar shiro-core-1.7.0.jar shiro-ehcache-1.7.0.jar shiro-spring-1.7.0.jar ...spring-context-shiro.xml 修改说明.txt

Global site tag (gtag.js) - Google Analytics