我安装了Apache Shiro 1.4.0并且正在关注this official tutorial以进行设置。
当我尝试使用教程中的代码使用SecurityUtils
初始化SecurityManager
时:
Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
SecurityManager securityManager = factory.getInstance();
SecurityUtils.setSecurityManager(securityManager);
我收到一条消息,IniSecurityManagerFactory
现已弃用,以支持Shiro的Environment
。
我无法找到任何教程,说明如何使用Environment
初始化Shiro,其文档并没有多大帮助:
一个Environment实例封装了Shiro的所有对象 需要运作。它本质上是一个元&#39;所有的对象 可以为应用程序获取Shiro组件。
环境实例通常是在解析a时创建的 Shiro配置文件。环境实例可以存储在 应用程序认为必要的任何地方,并从中可以检索 实施过程中可能需要的任何Shiro组件 安全行为。
例如,可通过环境访问的最明显的组件 instance是应用程序的securityManager。
那么,我该如何使用这种新的初始化机制呢?
答案 0 :(得分:3)
从Shiro 1.5开始,现在有BasicIniEnvironment
。它的Javadoc建议像这样创建SecurityManager
:
Environment env = new BasicIniEnvironment("classpath:shiro.ini");
SecurityManager securityManager = env.getSecurityManager();
然后您可以继续:
SecurityUtils.setSecurityManager(securityManager);
话虽这么说,我认为在标准Web应用程序中使用Shiro时,我认为不应该一个人做,而应该在EnvironmentLoaderListener
文件中配置web.xml
:< / p>
<listener>
<listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class>
</listener>
根据Javadoc,这将使用EnvrionmentLoader并通过查看以下位置从shiro.ini
加载配置:
因此,只需将shiro.ini
放在类路径上,然后添加Shiro即可自行配置。