Hi Pete, Did you figure out what was happening here?
Shiro's default web integration requires a WebEnvironment instance be present in the ServletContext. This is referenced by the ShiroFilter at runtime. It appears that the WebUtils.getRequiredWebEnvironment is not finding the expected WebEnvironment instance. Perhaps Jetty is wiping out the ServletContext and creating a new one without Shiro's knowledge? -- Les Hazlewood | @lhazlewood CTO, Stormpath | http://stormpath.com | @goStormpath | 888.391.5282 On Tue, Mar 26, 2013 at 11:08 AM, Pete Poulos <[email protected]> wrote: > Hi, > > I'm not sure if this is a jetty issue or an issue with shiro, but I am > trying to use the Jetty-Maven plugin for development and one of the > key features I want is Jetty's hot redeployment when files are > changed. However, Shiro is throwing the following exception when jetty > attempts to reload the application and I am not certain what can be > done to correct this. > > [Scanner-0] ERROR org.apache.shiro.web.servlet.AbstractFilter - Unable > to start Filter: [No WebEnvironment found: no > EnvironmentLoaderListener registered?]. > java.lang.IllegalStateException: No WebEnvironment found: no > EnvironmentLoaderListener registered? > at > org.apache.shiro.web.util.WebUtils.getRequiredWebEnvironment(WebUtils.java:276) > at > org.apache.shiro.web.servlet.ShiroFilter.init(ShiroFilter.java:73) > at > org.apache.shiro.web.servlet.AbstractShiroFilter.onFilterConfigSet(AbstractShiroFilter.java:152) > at > org.apache.shiro.web.servlet.AbstractFilter.init(AbstractFilter.java:97) > at > org.eclipse.jetty.servlet.FilterHolder.doStart(FilterHolder.java:123) > at > org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:69) > at > org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:732) > at > org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:279) > at > org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1314) > at > org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:722) > at > org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:492) > at > org.eclipse.jetty.maven.plugin.JettyWebAppContext.doStart(JettyWebAppContext.java:275) > at > org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:69) > at > org.eclipse.jetty.maven.plugin.JettyRunMojo.restartWebApp(JettyRunMojo.java:527) > at > org.eclipse.jetty.maven.plugin.JettyRunMojo$1.filesChanged(JettyRunMojo.java:481) > at > org.eclipse.jetty.util.Scanner.reportBulkChanges(Scanner.java:676) > at > org.eclipse.jetty.util.Scanner.reportDifferences(Scanner.java:539) > at org.eclipse.jetty.util.Scanner.scan(Scanner.java:391) > at org.eclipse.jetty.util.Scanner$1.run(Scanner.java:329) > at java.util.TimerThread.mainLoop(Timer.java:555) > at java.util.TimerThread.run(Timer.java:505) > > My web.xml looks like the following: > > <?xml version="1.0" ?> > <web-app xmlns="http://java.sun.com/xml/ns/j2ee" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee > http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" > version="2.4"> > > <!-- SHIRO CONFIGURATION > ============================================== --> > > <listener> > > <listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class> > </listener> > > <filter> > <filter-name>ShiroFilter</filter-name> > > <filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class> > </filter> > > <filter-mapping> > <filter-name>ShiroFilter</filter-name> > <url-pattern>/*</url-pattern> > <dispatcher>REQUEST</dispatcher> > <dispatcher>FORWARD</dispatcher> > <dispatcher>INCLUDE</dispatcher> > <dispatcher>ERROR</dispatcher> > </filter-mapping> > > <!-- DATA SOURCE > ====================================================== --> > > <resource-ref> > <description>Account Data Source</description> > <res-ref-name>jdbc/AccountDB</res-ref-name> > <res-type>javax.sql.DataSource</res-type> > <res-auth>Container</res-auth> > </resource-ref> > > </web-app> > > > And finally, here is the relevant portion of my maven pom file: > > > <build> > <plugins> > <plugin> > <groupId>org.eclipse.jetty</groupId> > <artifactId>jetty-maven-plugin</artifactId> > <version>9.0.0.RC2</version> > <configuration> > <jettyXml>src/jetty/jetty.xml</jettyXml> > <scanIntervalSeconds>1</scanIntervalSeconds> > <webApp> > <contextPath>/</contextPath> > > <overrideDescriptor>src/jetty/override-web.xml</overrideDescriptor> > </webApp> > </configuration> > <dependencies> > <dependency> > <groupId>mysql</groupId> > > <artifactId>mysql-connector-java</artifactId> > <version>5.1.24</version> > </dependency> > </dependencies> > </plugin> > </plugins> >
