我遇到了有关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,
从而引发警告。
这是错误还是我错过了什么?