[ 
https://issues.apache.org/jira/browse/JENA-2055?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17292906#comment-17292906
 ] 

Claude Warren commented on JENA-2055:
-------------------------------------

I have two items to bring up here:

*One – The record code for OperationDeniedException*

I think there is a problem with the original solution.  If the problem is that 
authentication is required the system returns a 403 (forbidden) rather than a 
401 (unauthorized).  The issue in in the patch at the line that reads:
{code:java}
if ( ex.getCause() != null && ex.getCause() instanceof OperationDeniedException 
){code}
The code that follows should distinguish between the AccessDenied and the 
AuthenticationRequired exceptions.  I think that CannotCreate should proibably 
go with AccessDenied.

*Two – The permissions issue in UNION*

The work around for this problem  is to modify the SecurityEvaluator.

Background:

The system verifies that the user has access to the graph, if not it throws the 
ReadDeniedException.  However, if the user has access to the graph then the 
system will look at each triple and verify access.  So if the SecurityEvaluator 
returns true for graph access and then false for every triple the system will 
work.

 

The solution is probably to change the find() methods so that hey call 
canRead() rather than checkRead() and if canRead() returns false then return an 
empty iterator..

 

 

> handle properly the denied access generated by jena-permission security 
> evaluator
> ---------------------------------------------------------------------------------
>
>                 Key: JENA-2055
>                 URL: https://issues.apache.org/jira/browse/JENA-2055
>             Project: Apache Jena
>          Issue Type: Bug
>          Components: Fuseki
>    Affects Versions: Jena 3.17.0
>         Environment: jena-fuseki 3.17.0
> openjdk version "1.8.0_275"
>            Reporter: info parlepeuple
>            Assignee: Andy Seaborne
>            Priority: Major
>              Labels: fuseki2, permission
>             Fix For: Jena 4.0.0
>
>         Attachments: 
> 0001-handle-properly-the-denied-access-generated-by-jena.patch, 
> ShiroEvaluator.java, localData.ttl, pom.xml
>
>
> When the dataset is secured with [jena 
> permission|https://jena.apache.org/documentation/permissions/] , and some 
> access is denied, an exception is thrown from the SecuredGraph.
> This exception is not catched in SPARQLQueryProcessor, which results in a 500 
> error returned to the HTTP client.
> exception OperationDeniedException should return a 403, not a 500.
>  
> attached is the patch !
>  
> [2021-02-21 03:10:26] Fuseki WARN [3] RC = 500 : Model permissions violation:
>  org.apache.jena.shared.ReadDeniedException: Model permissions violation:
>  at 
> org.apache.jena.permissions.impl.SecuredItemImpl.checkRead(SecuredItemImpl.java:683)
>  ~[jena-permissions-3.17.0.jar:3.17.0]
>  at 
> org.apache.jena.permissions.graph.impl.SecuredGraphImpl.find(SecuredGraphImpl.java:154)
>  ~[jena-permissions-3.17.0.jar:3.17.0]
>  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_275]
>  at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
> ~[?:1.8.0_275]
>  at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>  ~[?:1.8.0_275]
>  at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_275]
>  at 
> org.apache.jena.permissions.impl.SecuredItemInvoker.invoke(SecuredItemInvoker.java:120)
>  ~[jena-permissions-3.17.0.jar:3.17.0]
>  at com.sun.proxy.$Proxy18.find(Unknown Source) ~[?:?]
>  at 
> org.apache.jena.sparql.graph.GraphUnionRead.graphBaseFind(GraphUnionRead.java:104)
>  ~[fuseki-server.jar:3.17.0]
>  at org.apache.jena.graph.impl.GraphBase.find(GraphBase.java:244) 
> ~[fuseki-server.jar:3.17.0]
>  at org.apache.jena.graph.impl.GraphBase.graphBaseFind(GraphBase.java:261) 
> ~[fuseki-server.jar:3.17.0]
>  at org.apache.jena.graph.impl.GraphBase.find(GraphBase.java:258) 
> ~[fuseki-server.jar:3.17.0]
>  at org.apache.jena.graph.impl.WrappedGraph.find(WrappedGraph.java:100) 
> ~[fuseki-server.jar:3.17.0]
>  at 
> org.apache.jena.sparql.engine.iterator.QueryIterTriplePattern$TripleMapper.<init>(QueryIterTriplePattern.java:83)
>  ~[fuseki-server.jar:3.17.0]
>  at 
> org.apache.jena.sparql.engine.iterator.QueryIterTriplePattern.nextStage(QueryIterTriplePattern.java:52)
>  ~[fuseki-server.jar:3.17.0]
>  at 
> org.apache.jena.sparql.engine.iterator.QueryIterRepeatApply.makeNextStage(QueryIterRepeatApply.java:108)
>  ~[fuseki-server.jar:3.17.0]
>  at 
> org.apache.jena.sparql.engine.iterator.QueryIterRepeatApply.hasNextBinding(QueryIterRepeatApply.java:65)
>  ~[fuseki-server.jar:3.17.0]
>  at 
> org.apache.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:114)
>  ~[fuseki-server.jar:3.17.0]
>  at 
> org.apache.jena.sparql.engine.iterator.QueryIterBlockTriplesStar.hasNextBinding(QueryIterBlockTriplesStar.java:54)
>  ~[fuseki-server.jar:3.17.0]
>  at 
> org.apache.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:114)
>  ~[fuseki-server.jar:3.17.0]
>  at 
> org.apache.jena.sparql.engine.iterator.QueryIterConvert.hasNextBinding(QueryIterConvert.java:58)
>  ~[fuseki-server.jar:3.17.0]
>  at 
> org.apache.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:114)
>  ~[fuseki-server.jar:3.17.0]
>  at 
> org.apache.jena.sparql.engine.iterator.QueryIteratorWrapper.hasNextBinding(QueryIteratorWrapper.java:38)
>  ~[fuseki-server.jar:3.17.0]
>  at 
> org.apache.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:114)
>  ~[fuseki-server.jar:3.17.0]
>  at 
> org.apache.jena.sparql.engine.iterator.QueryIteratorWrapper.hasNextBinding(QueryIteratorWrapper.java:38)
>  ~[fuseki-server.jar:3.17.0]
>  at 
> org.apache.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:114)
>  ~[fuseki-server.jar:3.17.0]
>  at 
> org.apache.jena.sparql.engine.ResultSetStream.hasNext(ResultSetStream.java:74)
>  ~[fuseki-server.jar:3.17.0]
>  at 
> org.apache.jena.sparql.engine.ResultSetCheckCondition.hasNext(ResultSetCheckCondition.java:55)
>  ~[fuseki-server.jar:3.17.0]
>  at 
> org.apache.jena.fuseki.servlets.SPARQLQueryProcessor.executeQuery(SPARQLQueryProcessor.java:324)
>  ~[fuseki-server.jar:3.17.0]
>  at 
> org.apache.jena.fuseki.servlets.SPARQLQueryProcessor.execute(SPARQLQueryProcessor.java:273)
>  ~[fuseki-server.jar:3.17.0]
>  at 
> org.apache.jena.fuseki.servlets.SPARQLQueryProcessor.executeWithParameter(SPARQLQueryProcessor.java:222)
>  ~[fuseki-server.jar:3.17.0]
>  at 
> org.apache.jena.fuseki.servlets.SPARQLQueryProcessor.execute(SPARQLQueryProcessor.java:207)
>  ~[fuseki-server.jar:3.17.0]
>  at 
> org.apache.jena.fuseki.servlets.ActionService.executeLifecycle(ActionService.java:58)
>  ~[fuseki-server.jar:3.17.0]
>  at 
> org.apache.jena.fuseki.servlets.SPARQLQueryProcessor.execPost(SPARQLQueryProcessor.java:83)
>  ~[fuseki-server.jar:3.17.0]
>  at 
> org.apache.jena.fuseki.servlets.ActionProcessor.process(ActionProcessor.java:34)
>  ~[fuseki-server.jar:3.17.0]
>  at org.apache.jena.fuseki.servlets.ActionBase.process(ActionBase.java:55) 
> ~[fuseki-server.jar:3.17.0]
>  at 
> org.apache.jena.fuseki.servlets.ActionExecLib.execAction(ActionExecLib.java:106)
>  ~[fuseki-server.jar:3.17.0]
>  at 
> org.apache.jena.fuseki.server.Dispatcher.dispatchAction(Dispatcher.java:118) 
> ~[fuseki-server.jar:3.17.0]
>  at org.apache.jena.fuseki.server.Dispatcher.process(Dispatcher.java:110) 
> ~[fuseki-server.jar:3.17.0]
>  at org.apache.jena.fuseki.server.Dispatcher.dispatch(Dispatcher.java:96) 
> ~[fuseki-server.jar:3.17.0]
>  at 
> org.apache.jena.fuseki.servlets.FusekiFilter.doFilter(FusekiFilter.java:51) 
> ~[fuseki-server.jar:3.17.0]
>  at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) 
> ~[fuseki-server.jar:3.17.0]
>  at 
> org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
>  ~[fuseki-server.jar:3.17.0]
>  at 
> org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)
>  ~[fuseki-server.jar:3.17.0]
>  at 
> org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108) 
> ~[fuseki-server.jar:3.17.0]
>  at 
> org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
>  ~[fuseki-server.jar:3.17.0]
>  at 
> org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
>  ~[fuseki-server.jar:3.17.0]
>  at 
> org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
>  ~[fuseki-server.jar:3.17.0]
>  at 
> org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108) 
> ~[fuseki-server.jar:3.17.0]
>  at 
> org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
>  ~[fuseki-server.jar:3.17.0]
>  at 
> org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
>  ~[fuseki-server.jar:3.17.0]
>  at 
> org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
>  ~[fuseki-server.jar:3.17.0]
>  at 
> org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108) 
> ~[fuseki-server.jar:3.17.0]
>  at 
> org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
>  ~[fuseki-server.jar:3.17.0]
>  at 
> org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
>  ~[fuseki-server.jar:3.17.0]
>  at 
> org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
>  ~[fuseki-server.jar:3.17.0]
>  at 
> org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:450)
>  ~[fuseki-server.jar:3.17.0]
>  at 
> org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365)
>  ~[fuseki-server.jar:3.17.0]
>  at 
> org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)
>  ~[fuseki-server.jar:3.17.0]
>  at 
> org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)
>  ~[fuseki-server.jar:3.17.0]
>  at 
> org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)
>  ~[fuseki-server.jar:3.17.0]
>  at 
> org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)
>  ~[fuseki-server.jar:3.17.0]
>  at 
> org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
>  ~[fuseki-server.jar:3.17.0]
>  at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) 
> ~[fuseki-server.jar:3.17.0]
>  at 
> org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
>  ~[fuseki-server.jar:3.17.0]
>  at 
> org.apache.jena.fuseki.servlets.CrossOriginFilter.handle(CrossOriginFilter.java:284)
>  ~[fuseki-server.jar:3.17.0]
>  at 
> org.apache.jena.fuseki.servlets.CrossOriginFilter.doFilter(CrossOriginFilter.java:247)
>  ~[fuseki-server.jar:3.17.0]
>  at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:201) 
> ~[fuseki-server.jar:3.17.0]
>  at 
> org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
>  ~[fuseki-server.jar:3.17.0]
>  at 
> org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:548) 
> ~[fuseki-server.jar:3.17.0]
>  at 
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) 
> ~[fuseki-server.jar:3.17.0]
>  at 
> org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:602) 
> ~[fuseki-server.jar:3.17.0]
>  at 
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
>  ~[fuseki-server.jar:3.17.0]
>  at 
> org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
>  ~[fuseki-server.jar:3.17.0]
>  at 
> org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1612)
>  ~[fuseki-server.jar:3.17.0]
>  at 
> org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
>  ~[fuseki-server.jar:3.17.0]
>  at 
> org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1434)
>  ~[fuseki-server.jar:3.17.0]
>  at 
> org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
>  ~[fuseki-server.jar:3.17.0]
>  at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:501) 
> ~[fuseki-server.jar:3.17.0]
>  at 
> org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1582)
>  ~[fuseki-server.jar:3.17.0]
>  at 
> org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
>  ~[fuseki-server.jar:3.17.0]
>  at 
> org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1349)
>  ~[fuseki-server.jar:3.17.0]
>  at 
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) 
> ~[fuseki-server.jar:3.17.0]
>  at 
> org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:716)
>  ~[fuseki-server.jar:3.17.0]
>  at 
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
>  ~[fuseki-server.jar:3.17.0]
>  at org.eclipse.jetty.server.Server.handle(Server.java:516) 
> ~[fuseki-server.jar:3.17.0]
>  at 
> org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:383) 
> ~[fuseki-server.jar:3.17.0]
>  at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:556) 
> [fuseki-server.jar:3.17.0]
>  at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:375) 
> [fuseki-server.jar:3.17.0]
>  at 
> org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:273) 
> [fuseki-server.jar:3.17.0]
>  at 
> org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
>  [fuseki-server.jar:3.17.0]
>  at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105) 
> [fuseki-server.jar:3.17.0]
>  at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104) 
> [fuseki-server.jar:3.17.0]
>  at 
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336)
>  [fuseki-server.jar:3.17.0]
>  at 
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313)
>  [fuseki-server.jar:3.17.0]
>  at 
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171)
>  [fuseki-server.jar:3.17.0]
>  at 
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129)
>  [fuseki-server.jar:3.17.0]
>  at 
> org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:375)
>  [fuseki-server.jar:3.17.0]
>  at 
> org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:773)
>  [fuseki-server.jar:3.17.0]
>  at 
> org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:905)
>  [fuseki-server.jar:3.17.0]
>  at java.lang.Thread.run(Thread.java:748) [?:1.8.0_275]
>  [2021-02-21 03:10:26] Fuseki INFO [3] 500 Server Error (18 ms)



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to