【问题标题】:When trying to initiate Shiro SecurityManager from INI resource, encountered java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory尝试从 INI 资源启动 Shiro SecurityManager 时,遇到 java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
【发布时间】:2018-01-31 13:36:37
【问题描述】:

刚开始试用Shiro,在尝试SecurityManager from an INI resource的代码时遇到

java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory

扩展信息:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
    at org.apache.commons.beanutils.ConvertUtilsBean.<init>(ConvertUtilsBean.java:154)
    at org.apache.commons.beanutils.BeanUtilsBean.<init>(BeanUtilsBean.java:113)
    at org.apache.commons.beanutils.BeanUtilsBean$1.initialValue(BeanUtilsBean.java:64)
    at org.apache.commons.beanutils.BeanUtilsBean$1.initialValue(BeanUtilsBean.java:60)
    at org.apache.commons.beanutils.ContextClassLoaderLocal.get(ContextClassLoaderLocal.java:154)
    at org.apache.commons.beanutils.BeanUtilsBean.getInstance(BeanUtilsBean.java:76)
    at org.apache.commons.beanutils.PropertyUtilsBean.getInstance(PropertyUtilsBean.java:107)
    at org.apache.commons.beanutils.PropertyUtils.getPropertyDescriptor(PropertyUtils.java:498)
    at org.apache.shiro.config.ReflectionBuilder.isTypedProperty(ReflectionBuilder.java:409)
    at org.apache.shiro.config.ReflectionBuilder.applyProperty(ReflectionBuilder.java:702)
    at org.apache.shiro.config.ReflectionBuilder.applySingleProperty(ReflectionBuilder.java:364)
    at org.apache.shiro.config.ReflectionBuilder.applyProperty(ReflectionBuilder.java:325)
    at org.apache.shiro.config.ReflectionBuilder$AssignmentStatement.doExecute(ReflectionBuilder.java:955)
    at org.apache.shiro.config.ReflectionBuilder$Statement.execute(ReflectionBuilder.java:887)
    at org.apache.shiro.config.ReflectionBuilder$BeanConfigurationProcessor.execute(ReflectionBuilder.java:765)
    at org.apache.shiro.config.ReflectionBuilder.buildObjects(ReflectionBuilder.java:260)
    at org.apache.shiro.config.IniSecurityManagerFactory.buildInstances(IniSecurityManagerFactory.java:167)
    at org.apache.shiro.config.IniSecurityManagerFactory.createSecurityManager(IniSecurityManagerFactory.java:130)
    at org.apache.shiro.config.IniSecurityManagerFactory.createSecurityManager(IniSecurityManagerFactory.java:108)
    at org.apache.shiro.config.IniSecurityManagerFactory.createInstance(IniSecurityManagerFactory.java:94)
    at org.apache.shiro.config.IniSecurityManagerFactory.createInstance(IniSecurityManagerFactory.java:46)
    at org.apache.shiro.config.IniFactorySupport.createInstance(IniFactorySupport.java:123)
    at org.apache.shiro.util.AbstractFactory.getInstance(AbstractFactory.java:47)
    at core.Server.testShiro(Server.java:121)
    at core.Server.main(Server.java:57)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 25 more

core.Server.testShiro(Server.java:121) 所说的我的代码是:

org.apache.shiro.mgt.SecurityManager securityManager = factory.getInstance();

我的猜测是,我在上一行代码 Factory&lt;org.apache.shiro.mgt.SecurityManager&gt; factory = new IniSecurityManagerFactory("classpath:shiro.ini"); 中指定的 shiro.ini 文件存在一些问题,根据错误消息,似乎 beanutils 是需要 org.apache.commons.logging.LogFactory 的库类

我的问题不是如何纠正 shiro.ini,而是如何解决 ClassNotFoundException。

请注意,我使用的是 log4j2,并且已经在我的库中包含了 log4j2 jar,以及 slf4j 桥接适配器(我的理解是 Shiro 需要这些)jar:

  • log4j-api-2.8.2.jar
  • log4j-core-2.8.2.jar
  • log4j-slf4j-impl-2.8.2.jar
  • slf4j-api-1.7.25.jar

还有 Hibernate jars

我进行了一些搜索,看到了 Les Hazlewood 对 Shiro 用户网站问题 java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory 的回复以查看 explicitly excluding JCL。定向站点中所述的三个选项并不真正适用,因为我没有使用 Maven 化的项目,只是 Netbeans 中的一个独立 Java 项目。但是,我尝试在我的 lib 文件夹中包含 commons-logging-1.2.jarjcl-over-slf4j-1.7.25.jar(我收集到的内容类似于网站上的“提供范围”指令),但这并不能解决异常。

我也尝试在我的 lib 文件夹中包含 log4j-jcl-2.8.2.jar,但同样的异常仍然没有消失。

任何帮助和指导将不胜感激。提前致谢!干杯。

【问题讨论】:

    标签: slf4j log4j2 shiro apache-commons-logging


    【解决方案1】:

    我在使用 shiro-web 时遇到了同样的错误。由于您已经使用 slf4j,因此只需将运行时依赖项添加到 jcl-over-slf4j。我只是这样做了,它解决了异常。如果您仍然收到错误,那么您没有做正确的事情 - 例如。将罐子放在正确的位置,...

    不要将 commons-logging 与 jcl 网桥一起包含。要么使用 jcl 桥接 slf4j 要么使用 commons-logging 两者都没有多大意义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-05
      • 2013-08-08
      • 2019-04-24
      • 1970-01-01
      • 2017-01-03
      • 2011-11-26
      • 2020-08-20
      相关资源
      最近更新 更多