Apache Shiro 1.4.0 initialization

Posted

技术标签:

【中文标题】Apache Shiro 1.4.0 initialization【英文标题】: 【发布时间】:2017-12-29 03:44:40 【问题描述】:

我安装了 Apache Shiro 1.4.0 并关注 this official tutorial 以进行设置。

当我尝试使用教程中的这段代码用 SecurityManager 初始化 SecurityUtils 时:

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

我收到一条消息,现在 IniSecurityManagerFactory 已弃用,取而代之的是 Shiro 的 Environment

我找不到任何说明如何使用 Environment 初始化 Shiro 的教程,而且它的文档也没有多大帮助:

Environment 实例封装了 Shiro 的所有对象 需要发挥作用。它本质上是一个“元”对象,所有 可以为应用程序获取 Shiro 组件。

Environment 实例通常是通过解析 Shiro 配置文件。环境实例可以存储在 应用程序认为必要并从中检索的任何地方 实施中可能需要的任何 Shiro 组件 安全行为。

例如,通过环境可访问的最明显的组件 instance 是应用程序的 securityManager。

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

【问题讨论】:

FWIW,好像1.4.0还没有正式发布。至少,该网站称 1.4.0 仍处于“抢先体验模式”。所以最好坚持使用 1.3.2,至少在网站更新之前。 (IniSecurityManagerFactory 在 1.3.2 中未弃用。) FWIW,我们今天在 Shiro 1.4.2,文档仍然过时。 FWI 仍然是 W,当使用 Shiro 1.7.1 跟随 10 minute tutorial 时也会发生同样的情况。 【参考方案1】:

从 Shiro 1.5 开始,现在有 BasicIniEnvironment。它的Javadoc 建议像这样创建SecurityManager

Environment env = new BasicIniEnvironment("classpath:shiro.ini");
SecurityManager securityManager = env.getSecurityManager();

然后您可以继续:

SecurityUtils.setSecurityManager(securityManager);

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

<listener>
    <listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class>
</listener>

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

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

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

【讨论】:

以上是关于Apache Shiro 1.4.0 initialization的主要内容,如果未能解决你的问题,请参考以下文章

将 Struts 2 与 Apache Shiro 集成时如何显示结果页面

shiro : java.lang.IllegalArgumentException: Odd number of characters.

Springboot整合Shiro

SpringBoot整合Shiro

shiro 基本知识测试

在Spring中集成shiro