Hi Steinar, I thought that's what pax shiro is for. [1]
regards, Achim [1] - https://github.com/ops4j/org.ops4j.pax.shiro 2018-03-18 20:23 GMT+01:00 Steinar Bang <[email protected]>: > Has anyone else been using apache shiro with the pax web whiteboard > extender? Has anyone else succeeded in making it work? > > Shiro uses a filter to handle authentication and authorization for a > paths of a webapp. > > I'm trying to create a ShiroFilter DS component to front a servlet > (also a DS component) when using the Pax Web Whiteboard Exctender. > > It seemed to work at first, ie. I got a login windown in my application > and was able to log in (which means that shiro is working as it is > supposed to), but when I changed the name of the filter DS component it > started failing. > > I don't know *why* it fails when the name is changed, but I know *how* > it fails: it fails with the error message: > No WebEnvironment found: no EnvironmentLoaderListener registered? > > This is a well known and dreaded error message when using apache shiro, > see eg. > https://stackoverflow.com/questions/15645799/jetty- > maven-plugin-unable-to-hot-redeploy-shiro-filter > https://stackoverflow.com/questions/15645799/jetty- > maven-plugin-unable-to-hot-redeploy-shiro-filter > > I have encountered this issue earlier, when I first tried to use the pax > web whiteboard extender, using my home brewed "mini dependency > injection" BundleActivator. The way I solved it make the ShiroFilter > listen for a service of type WebContainer, and create an > EnvironmentLoaderListener when a WebContainer is enabled, like this: > > @Component( > property= { > HttpWhiteboardConstants.HTTP_WHITEBOARD_FILTER_PATTERN+"=/ > ukelonn/*", > "servletNames=ukelonn"}, > service=Filter.class, > immediate=true > ) > public class UkelonnShiroFilter extends ShiroFilter { > private WebContainer webContainer; > private HttpContext httpcontext; > private EnvironmentLoaderListener listener; > > @Reference > public void setWebContainer(WebContainer webContainer) { > createEnvironmentLoaderListenerAndDefaultContext(webContainer); > } > > private void > createEnvironmentLoaderListenerAndDefaultContext(WebContainer > webContainer) { > if (this.webContainer == webContainer) { > return; // already registered, nothing to do > } > > unregisterExistingEnvironmentLoaderListener(); > > this.webContainer = webContainer; > > if (webContainer != null) { > httpcontext = webContainer.createDefaultHttpContext(); > listener = new EnvironmentLoaderListener(); > webContainer.registerEventListener(listener, httpcontext); > } > } > > private void unregisterExistingEnvironmentLoaderListener() { > if (webContainer != null) { > webContainer.unregisterEventListener(listener); > listener = null; > } > } > > } > > This worked at first, but stopped working when I changed the name of the > class. I can see in the debugger that the UkelonnShiroFilter gets a > WebContainer injection and creates and registers an > EnvironmentLoaderListener. > > But even so the ShiroFilter fails during initialization with the > following error message: > java.lang.IllegalStateException: No WebEnvironment found: no > EnvironmentLoaderListener registered? > > Does anyone know what I can/should do to initialize the WebEnvironment > properly for the shiro filter? > > Thanks! > > > - Steinar > > -- > -- > ------------------ > OPS4J - http://www.ops4j.org - [email protected] > > --- > You received this message because you are subscribed to the Google Groups > "OPS4J" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > For more options, visit https://groups.google.com/d/optout. > -- Apache Member Apache Karaf <http://karaf.apache.org/> Committer & PMC OPS4J Pax Web <http://wiki.ops4j.org/display/paxweb/Pax+Web/> Committer & Project Lead blog <http://notizblog.nierbeck.de/> Co-Author of Apache Karaf Cookbook <http://bit.ly/1ps9rkS> Software Architect / Project Manager / Scrum Master -- -- ------------------ OPS4J - http://www.ops4j.org - [email protected] --- You received this message because you are subscribed to the Google Groups "OPS4J" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
