Apache Shiro配置(二)

总的参考文档:http://shiro.apache.org/reference.html
本文参考文档:http://shiro.apache.org/configuration.html

原文中关于配置的话题是概述中的一节,配置很重要也有点小复杂,这里把它独立出来成为一章。

1、SecurityManager组件图

首先明确一点,在使用Shiro之前要先进行配置,那么配置的目的是什么?配置的东西是什么?首先再看一下Shiro的详细架构图:

重点关注SecurityManager这一块。前文说过,SecurityManager相当于是一个大帽子,里边有很多组件。在进行应用开发时,我们需要实例化一个SecurityManager对象。SecurityManager包含很多组件,在实例化SecurityManager之前,要先实例化Authenticator、Authorizer等各种组件,然后再通过SecurityManager的各种setter方法或者构造函数将Authenticator、Authorizer等组件设置进去,最后完成SecurityManager的初始化。Authenticator、Authorizer等各种组件可以是Shiro内置实现,也可以是开发者自定义的实现。

配置的目的就是控制应用如何始化SecurityManager包含的各种组件以及SecurityManager本身的初始化。

2、硬编码配置

SecurityManager本身及它包含的所有组件都是JAVA BEAN对象,我们可以通过在程序以硬编码的方式实例化SecurityManager及它包含的各种组件,绕过配置文件,当然一般不会这么干。看两个示例。

示例1:

Realm realm = new MyRealm(param1, param2, param3,...);
SecurityManager securityManager = new DefaultSecurityManager(realm);
SecurityUtils.setSecurityManager(securityManager);

上例很简单。
第一行代码:MyRealm是开发者实现Shiro的Realm接口而自定义的Realm,这个相当于是通常应用中的DAO层,先实例化它。
第二行代码:实例化SecurityManager,它是DefaultSecurityManager类型,把第一行实例化的Realm当成参数传给它。
第三行代码:这个主要实现单例模式。把实例化后的SecurityManager传给SecurityUtils,SecurityUtils在整个应用中只有一个实例,setSecurityManager只需要一次,在应用中的其它地方使用SecurityManager时,只需要调用SecurityUtils.getSecurityManager()方法就行了。

SecurityManager包含的其它组件,开发者没有提供自己的实现,那么就用Shiro的默认实现。

示例2:

...

DefaultSecurityManager securityManager = new DefaultSecurityManager(realm);

SessionDAO sessionDAO = new CustomSessionDAO();

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

这个更进一步,它实现了自定义SessionDAO。SessionDAO并不是SecurityManager的直属成员,SecurityManager包含SessionManager,SessionManager才包含SessionDAO,因此它的设置方法就像最后一行代码一样。

3、配置文件配置

硬编码不够灵活,通过配置文件配置JAVA BEAN,程序中的工厂类读取配置文件并根据配置文件实例化JAVA BEAN对象,这个很常见,Shiro也一样。

示例代码如下:

import org.apache.shiro.Securi
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值