Hi. Thanks for the hints. I think my first approach wasn't too wrong, but it's still something missing there... I set up a ServletContextHandler and configured it according to the web.xml file in the example, and I let my RequestHandler extend HandlerWrapper instead of AbstractHandler (don't really know if tthat's the right approach...):
/* handlers */ ServletContextHandler context = new ServletContextHandler(); context.setInitParameter("shiroConfigLocations", "classpath:shiro.ini"); context.addEventListener(new EnvironmentLoaderListener()); context.addFilter(ShiroFilter.class, "/*", EnumSet.of(REQUEST, FORWARD, INCLUDE, ERROR, ASYNC)); GzipHandler gzip = new GzipHandler(); gzip.setIncludedMimeTypes("text/html", "text/plain", "application/json"); RequestHandler requestHandler = new RequestHandler(this.gson, this.tractDB); context.insertHandler(requestHandler); context.setGzipHandler(gzip); this.server.setHandler(context); But it seems to work now ---- What i found was that I initialized the shiro.ini file in the main method. I somehow missed that, banging my head at the table right now :). thank you. Am Fr., 13. Mai 2022 um 07:53 Uhr schrieb Benjamin Marwell < bmarw...@apache.org>: > Hi! > > I think you need to init an environment and make it available > throughout all of the requests. > Look at this section: > https://shiro.apache.org/web.html#shiro_1_2_and_later > Especially the part "what it does": "(... including the > SecurityManager) and makes it accessible in the ServletContext. > > You can take a look at the class > "org.apache.shiro.web.env.EnvironmentLoaderListener" to see what it > looks like. > > Once set up, you should be able to access your WebSecurityManager in > any way you described. > > Am Fr., 13. Mai 2022 um 06:20 Uhr schrieb Lenny Primak < > lpri...@hope.nyc.ny.us>: > > > > Have you looked at the Shiro web tutorial? > > The examples there should work just fine. > > > > > > On May 12, 2022, at 8:28 PM, Josef Gosch <josef.go...@gmail.com> wrote: > > > > My authentication realm is set up correctly, I can authenticate through > an endpoint inside the RequestHandler. I can save the session cookie > manually, but I can't find a way for the SecurityManager or > WebSessionManager to intercept it. > > > > Josef Gosch <josef.go...@gmail.com> schrieb am Fr., 13. Mai 2022, 03:01: > >> > >> Hello. > >> > >> I have some troubles implementing Shiro in a distributed environment. > >> Clients/Server are communicating through a HTTP based Protocol provided > by Jetty on the server side. The client side is set up to store and reply > cookies. > >> > >> I played around with different approaches but nothing seems to fit. I > tried creating a ServletContextHandler and adding the Filters there, but I > have no clue how to combine it with my RequestHandler. I also don't find > much help online on this subject. Maybe someone here could give me a hint? > >> > >> It's basically made up of 2 Classes: > >> > >> public final class WebServer extends AbstractIdleService { > >> > >> // ~ Static fields > --------------------------------------------------------------------------------------------- > >> > >> private static final Logger L = > LoggerFactory.getLogger(WebServer.class); > >> > >> // ~ Instance fields > ------------------------------------------------------------------------------------------- > >> > >> private final int port; > >> private final Server server; > >> private final TractDB tractDB; > >> private final Gson gson; > >> > >> // ~ Constructors > ---------------------------------------------------------------------------------------------- > >> > >> public WebServer(final TractDB tractDB, final int port, final Gson > gson) { > >> this.tractDB = tractDB; > >> this.port = port; > >> this.gson = gson; > >> this.server = new Server(); > >> } > >> > >> // ~ Methods > --------------------------------------------------------------------------------------------------- > >> > >> @Override > >> protected void startUp() throws Exception { > >> > >> SslContextFactory sslContextFactory = new SslContextFactory(); > >> > sslContextFactory.setKeyStore(SSLKeyStore.create("server.keystore")); > >> > sslContextFactory.setKeyStorePassword(SSLKeyStore.KEYSTORE_PASSWORD); > >> sslContextFactory.setProtocol("TLSv1.2"); > >> > >> SslConnectionFactory ssl = new > SslConnectionFactory(sslContextFactory, "http/1.1"); > >> HttpConnectionFactory http = new HttpConnectionFactory(new > HttpConfiguration()); > >> > >> > >> /* connectors */ > >> ServerConnector sslConnector = new ServerConnector(this.server, > ssl, http); > >> sslConnector.setPort(this.port); > >> this.server.addConnector(sslConnector); > >> > >> /* handlers */ > >> > >> GzipHandler gzip = new GzipHandler(); > >> RequestHandler requestHandler = new RequestHandler(this.gson, > this.tractDB); > >> > >> gzip.setIncludedMimeTypes("text/html", "text/plain", > "application/json"); > >> > >> gzip.setHandler(requestHandler); > >> > >> this.server.setHandler(gzip); > >> > >> this.server.start(); > >> } > >> > >> @Override > >> protected void shutDown() throws Exception { > >> L.info("shutting down web-server"); > >> this.server.stop(); > >> } > >> } > >> > >> > --------------------------------------------------------------------------------------------- > >> > >> > --------------------------------------------------------------------------------------------- > >> > >> public final class RequestHandler extends AbstractHandler { > >> > >> // ~ Static fields > --------------------------------------------------------------------------------------------- > >> > >> private static final Logger L = > LoggerFactory.getLogger(RequestHandler.class); > >> > >> // ~ Instance fields > ------------------------------------------------------------------------------------------- > >> > >> // ... > >> > >> // ~ Constructors > ---------------------------------------------------------------------------------------------- > >> > >> public RequestHandler(final Gson gson, final TractDB tractDB) { > >> // ... > >> } > >> > >> // ~ Methods > --------------------------------------------------------------------------------------------------- > >> > >> @Override > >> public void handle(final String target, final Request baseRequest, > final HttpServletRequest request, final HttpServletResponse response) > throws IOException, ServletException { > >> L.debug("{} '{}'", request.getMethod(), target); > >> > >> try { > >> > >> /* default result: not found */ > >> HandlerResult handlerResult = > JsonResult.notFound(this.gson); > >> > >> /* ... Handlers will be dispatched here ... */ > >> > >> handlerResult.writeTo(response); > >> > >> } catch (RuntimeException e) { > >> L.error(e.getMessage(), e); > >> response.reset(); > >> > >> JsonResult.internalServerError(this.gson) > >> .writeTo(response); > >> } > >> > >> baseRequest.setHandled(true); > >> } > >> } > > > > >