You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@felix.apache.org by "J.W. Janssen (JIRA)" <ji...@apache.org> on 2014/02/13 10:19:20 UTC

[jira] [Comment Edited] (FELIX-3988) FilterHandler does not handle return of context.handleSecurity() correctly

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

J.W. Janssen edited comment on FELIX-3988 at 2/13/14 9:18 AM:
--------------------------------------------------------------

In case of filters, always setting the status to {{SC_FORBIDDEN}} prior to calling {{HttpContext#handleSecurity}} is also wrong in my opinion, as we're not sure that there is only *one* filter present in the chain. It could be that another filter already set a "non default" status code which we would overwrite in that case.

To send an HTML form to enter user credentials with a status code of {{SC_OK}}, I think it is "defendable" to state that an {{HttpContext#handleSecurity}} should commit its own response. Perhaps this could be addressed to the JavaDoc of {{HttpContext}} or in the HTTP service update?



was (Author: jajans):
In case of {{Filter}}s, always setting the status to {{SC_FORBIDDEN}} prior to calling {{HttpContext#handleSecurity}} is also wrong in my opinion, as we're not sure that there is only *one* filter present in the chain. It could be that another filter already set a "non default" status code which we would overwrite in that case.

To send an HTML form to enter user credentials with a status code of {{SC_OK}}, I think it is "defendable" to state that an {{HttpContext#handleSecurity}} should commit its own response. Perhaps this could be addressed to the JavaDoc of {{HttpContext}} or in the HTTP service update?


> FilterHandler does not handle return of context.handleSecurity() correctly
> --------------------------------------------------------------------------
>
>                 Key: FELIX-3988
>                 URL: https://issues.apache.org/jira/browse/FELIX-3988
>             Project: Felix
>          Issue Type: Bug
>          Components: HTTP Service
>    Affects Versions: http-2.2.0
>            Reporter: Kaspar von Gunten
>            Assignee: J.W. Janssen
>         Attachments: FilterHandler.patch
>
>
> This is somewhat similar to FELIX-2768, but not resolved.
> The JavaDoc for HttpContext.handleSecurity states: 
> * When this method returns false, the Http Service will send the response back to the client, thereby
> * completing the request. When this method returns true, the Http Service will proceed with servicing the 
> * request.
> The current FilterHandler impl is as follows:
> if (!getContext().handleSecurity(req, res)) {
>   res.sendError(HttpServletResponse.SC_FORBIDDEN);
> } else {
>   this.filter.doFilter(req, res, chain);
> }
> 1) This does not comply to the above doc, because the context might have set a status/error code and prepared everything correctly to be returned. Sending an error will overwrite the prepared headers and status.
> 2) Some context implementations are a bit eager and already send the response back before they return "false" from the above method. The current implementation will then lead to an IllegalStateException, because the response has already been committed. In order to be more robust, there should be a if(!res.isCommitted())-block around the handling of the "false" return value.
> I attached a patch for the second aspect of the issue, but couldn't resolve the first part, because - as it is at the moment - there seems to be no way to check if there is already a status set on the resource (no getStatus() or isStatusSet() method).
> Ideally the fix should be something like:
> if (!res.isCommitted() && !res.isStatusSet()) {
>   res.sendError(SC_FORBIDDEN);
> }



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)