Apache Shiro 1.4.0初始化

Vas*_*liy 7 java apache security shiro

我安装了Apache Shiro 1.4.0,并按照这个官方教程进行设置.

当我尝试使用教程中的代码进行初始化SecurityUtilsSecurityManager:

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

我收到的消息IniSecurityManagerFactory现在已被弃用,有利于Shiro的Environment.

我找不到任何教程来演示如何初始化Shiro使用Environment,其文档没有多大帮助:

Environment实例封装了Shiro运行所需的所有对象.它本质上是一个"元"对象,从中可以为应用程序获取所有Shiro组件.

通常在解析Shiro配置文件时创建Environment实例.环境实例可以存储在应用程序认为必要的任何位置,并且可以从中检索实现安全行为可能需要的任何Shiro组件.

例如,通过Environment实例可访问的最明显的组件是应用程序的securityManager.

那么,我该如何使用这种新的初始化机制呢?

seb*_*kur 7

从 Shiro 1.5 开始,现在有了BasicIniEnvironment. 它的Javadoc建议创建SecurityManager如下:

Environment env = new BasicIniEnvironment("classpath:shiro.ini");
SecurityManager securityManager = env.getSecurityManager();
Run Code Online (Sandbox Code Playgroud)

然后您可以继续:

SecurityUtils.setSecurityManager(securityManager);
Run Code Online (Sandbox Code Playgroud)

话虽这么说,我认为在标准 Web 应用程序中使用 Shiro 时,我认为不应该自己这样做,而是在文件EnvironmentLoaderListener中配置web.xml

<listener>
    <listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class>
</listener>
Run Code Online (Sandbox Code Playgroud)

根据Javadoc,这将使用EnvrionmentLoadershiro.ini并通过查看以下位置来加载配置:

  1. /WEB-INF/shiro.ini
  2. 类路径:shiro.ini

因此,我们可以简单地将其放在shiro.ini类路径上,添加 Shiro 会自行选择配置。