将CredentialMatcher附加到inRealm时引发Shiro警告

时间:2018-08-20 16:05:12

标签: java shiro

我遇到了有关Shiro iniRealm和CredentialMatcher的问题。我正在用一个ini文件创建一个securityManager。在该Ini文件的主要部分中,我将其放置:

main.put("NellMatcher","com.nellarmonia.shuttle.security.shiro.NellCredentialMatcher");
main.put("iniRealm.credentialsMatcher", "$NellMatcher");

我的完整Ini包含两个部分:

  • 一个用户包含很多用户
  • 一个主条目包含三个条目:
  

NellMatcher =>   com.nellarmonia.shuttle.security.shiro.NellCredentialMatcher   iniRealm.credentialsMatcher => $ NellMatcher       securityManager.subjectDAO.sessionStorageEvaluator.sessionStorageEnabled   =>假

根据https://shiro.apache.org/realm.html#credentials-matching,这应该很好。

我正在尝试将自己的凭据匹配器附加到默认的inRealm上。然后我这样做:

 Factory factory = new IniSecurityManagerFactory(ini);      
    securityManager = factory.getInstance();

并抛出此警告:

org.apache.shiro.realm.text.IniRealm - Users or Roles are already populated.
Configured Ini instance will be ignored.

如果我在源代码中做了一些工作,我可以看到在buildObjects的{​​{1}}方法中,我们 首先处理kvPair,然后使用以下命令初始化对象:

ReflectionBuilder.java

但是在//SHIRO-413:init method must be called for constructed objects that are Initializable LifecycleUtils.init(objects.values()); 的execute方法中,由于正在处理对BeanConfigurationProcessor,因此iniRealm也被初始化。

因此,将初始化iniRealm并调用“ "iniRealm.credentialsMatcher", "$NellMatcher"”尝试再次重新初始化iniRealm, 从而引发警告。

这是错误还是我错过了什么?

0 个答案:

没有答案