Hey Dan, Thanks for looking into this! It looks like we don't have a good replacement for a non-Servlet/Spring/Guice Environment impl. We probably need something like a BasicIniEnvironment
https://gist.github.com/bdemers/7acede56023b7f879a1103bc5373a2c5 /** * Basic usage:<p> * <code> * Environment env = new BasicIniEnvironment("classpath:shiro.ini"); * SecurityManager securityManager = env.getSecurityManager(); * </code> * */ public class BasicIniEnvironment extends DefaultEnvironment { public BasicIniEnvironment(Ini ini) { setSecurityManager(new IniSecurityManagerFactory(ini).getInstance()); } public BasicIniEnvironment(String iniResourcePath) { this(Ini.fromResourcePath(iniResourcePath)); } } We are still using the a derivative of an IniSecurityManger in the Web impl as well. So something like this would at least hide the implementation in the Environment. Thoughts? On Thu, Jun 1, 2017 at 5:30 PM, Dan Dold <[email protected]> wrote: > Hi, > > I am trying to work on SHIRO-625 ticket and I am finding it hard to > understand the new implementation. > > I understand the deprecated code; > > > Factory<SecurityManager> factory = new IniSecurityManagerFactory(" > > classpath:shiro.ini") > > SecurityManager securityManager = factory.getInstance() > > > This is a simple implementation but looking up how to implement the > Environment class in a similar fashion is proving very difficult. > So far I have got as far as; > > > Ini config = Ini.fromResourcePath("classpath;shiro:ini") > > Environment environment = new DefaultEnvironment(config) > > SecurityManager securityManager = environment.getSecurityManager() > > > But running this produces the following error; > > > Exception in thread "main" java.lang.IllegalStateException: No > >> SecurityManager found in Environment. This is an invalid environment > state. > > > > at > >> org.apache.shiro.env.DefaultEnvironment.getSecurityManager( > DefaultEnvironment.java:81) > > > > at Quickstart.main(Quickstart.java:60) > > > > > I have tried setting the SecurityManager doing the following; > > > environment.setSecurityManager(new DefaultSecurityManager()); > > > But that gave the following error; > > > > > Exception in thread "main" java.lang.ClassCastException: > > org.apache.shiro.mgt.DefaultSecurityManager cannot be cast to > > org.apache.shiro.config.Ini$Section > > at org.apache.shiro.config.Ini.put(Ini.java:47) > > at > > org.apache.shiro.env.DefaultEnvironment.setObject( > DefaultEnvironment.java:162) > > at > > org.apache.shiro.env.DefaultEnvironment.setSecurityManager( > DefaultEnvironment.java:92) > > at Quickstart.main(Quickstart.java:60) > > > I'm completely stuck on where to turn now. > Is there any documentation on how to setup Shiro using the Enviroment (or > is that what I am trying to setup), even a quick explanation on where I am > going right/wrong. > > Thanks, > Dan >
