Barry,

Hack for 3.15.0:

Example of installing a wrapper servlet filter in Apache jena Fuseki 3.15.0.

That servlet can put the Principal in ThreadLocal as a last resort to not having any access tot the servlet request or context.

Don't format to remove cached Principal object after the call to FusekiFilter!

https://gist.github.com/afs/0fc46097c4f8930ac12da9ca69fc42a8

Minimally tested.

    Andy


On 06/06/2020 09:51, Andy Seaborne wrote:
Hi Barry,

On 05/06/2020 14:44, Nouwt, B. (Barry) wrote:
Hi all, thanks for Apache Jena.

We are using Fuseki Main (embedded) together with a password file that configures Jetty's security settings. We are also using Jena Permissions and a custom SecurityEvaluator and we are wondering how to implement the SecurityEvaluator#getPrincipal() method when using Fuseki Embedded. In the Fuseki as a web application (which uses Shiro for its security), we were able to use Shiro's SecurityUtils.getSubject() method in the getPrincipal() method to retrieve the currently logged in user, but how can we achieve this using Jetty? I'm searching for a static method in Jetty's security that returns the currently logged in user, but until now I've only found ways to get the current user via the HttpRequest. But we do not have access to that within the SecurityEvaluator.

Shiro seems to be putting the putting the principal into a map held in a ThreadLocal.

Either doing that as a additional feature or having a way to tap into the auth-dispatch cycle so that user can can decide to do it seems reasonable. The latter - a general hook of some kind - would mean the request could be inspected for this or other things.

For the current released code, I haven't found a way to manipulate the Jetty server.  I had hoped to mess around with the Jetty structure and insert a filter but I can't find a way in Jetty9 yet. Got close (I can find the FusekiFilter) but changes aren't being see by the server and the usual dispatch still occurs. Some code in Jetty is taking a copy of structures.

FusekiServer.Builder does support adding servlet Filters to the server added but they go after the Fuseki dispatcher so don't help.

A simple code change is use FusekiServer.Builder.addFilter and change
servletsAndFilters move to line 1008 [1] to 995 [2], just before the FusekiFilter is created.

     Andy

BTW Is there any reason not to have the CORS filter always present in Fuseki main? e.g. Newer yasgui's loaded from unpkg.com require it.

[1]
https://github.com/apache/jena/blob/master/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/FusekiServer.java#L1008

[2]
https://github.com/apache/jena/blob/master/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/FusekiServer.java#L1008



Any ideas?

Thanks in advance!

Barry
This message may contain information that is not intended for you. If you are not the addressee or if this message was sent to you by mistake, you are requested to inform the sender and delete the message. TNO accepts no liability for the content of this e-mail, for the manner in which you use it and for damage of any kind resulting from the risks inherent to the electronic transmission of messages.

Reply via email to