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

Felix Meschberger commented on FELIX-2768:
------------------------------------------

I also ran into this issue a few times ...

I think the problem that the ServletHandler tries to solve is to send back a 
sensible error instead of a successfull 200 response in case the HttpContext 
did not send a response.

Maybe doHandle method should be modified like this:

    res.setStatus(HttpServletResponse.SC_FORBIDDEN);
    if (getContext().handleSecurity(req, res)) { 
       res.setStatus(HttpServletResponse.SC_OK); // default back to OK
       servlet.service(...)
    }

This would ensure the request is terminated with 403 unless the handleSecurity 
method returning false has set a different status.

WDYT ?

> HttpContext.handleSecurity returns SC_FORBIDDEN unless response is comitted
> ---------------------------------------------------------------------------
>
>                 Key: FELIX-2768
>                 URL: https://issues.apache.org/jira/browse/FELIX-2768
>             Project: Felix
>          Issue Type: Bug
>          Components: HTTP Service
>    Affects Versions: http-2.0.4
>            Reporter: Derek Baum
>
> The JavaDoc for HttpContext.handleSecurity states:
>        * If the request requires authentication and the Authorization header 
> in
>        * the request is missing or not acceptable, then this method should 
> set the
>        * WWW-Authenticate header in the response object, set the status in the
>        * response object to Unauthorized(401) and return <code>false</code>
> So the following implementation of handleSecurity() should cause an 
> UNAUTHORIZED response:
>                 response.setHeader("WWW-Authenticate", "BASIC realm=\"Secure 
> Moixa Energy Gateway\"");
>                 response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
>                 return false;
> This worked OK in org.apache.felix.http.jetty-1.0.1, but fails in 
> org.apache.felix.http.jetty-2.0.4, by always returning SC_FORBIDDEN.
> Examining the implementation: 
> org/apache/felix/http/base/internal/handler/ServletHandler.java:
>         if (!getContext().handleSecurity(req, res)) {
>             if (!res.isCommitted()) {
>                 res.sendError(HttpServletResponse.SC_FORBIDDEN);
>             }
>         } 
> which means that SC_FORBIDDEN is always returned, unless the response is 
> committed.
> In order to commit the response, response.flushBuffer() must be called in the 
> handleSecurity() implementation after setting the response code to 
> unauthorized. Howver, the JavaDoc for HttpContext does not indicate that it 
> is necessary to commit the response.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to