我安装了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的教程,并且它的文档没有太大帮助:
环境实例封装了Shiro的所有对象需要起作用。它本质上是一个“元”对象,所有可以为应用程序获取Shiro组件。
环境实例通常是通过解析Shiro配置文件。该环境实例可以存储在应用程序认为有必要的任何地方,都可以从中检索在实施中可能需要的Shiro的任何组件安全行为。
例如,通过环境可访问的最明显的组件实例是应用程序的securityManager。
所以,如何使用这种新的初始化机制?
从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
:
<listener>
<listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class>
</listener>
根据Javadoc,它将使用EnvrionmentLoader并通过查看以下位置从shiro.ini
加载配置:
因此,您可以简单地将shiro.ini
放在类路径上,添加Shiro会自行选择配置。