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

Sergey Beryozkin commented on CXF-4986:
---------------------------------------

Ouch, I really thought I managed to convince the spec lead to get rid of this 
reference to ServletRequest and I thought they did some work but it stayed, 
really bad idea IMHO, the filters will see the HTTP request attributes set 
before the JAX-RS runtime even executes. Sigh. Have to fix that, thanks for 
spotting that. FYI, we have the tests where the filters pass the properties 
around, though they are not persisted into HTTP request...

 
                
> jax-rs2 request filter is unable to modify request header by adding a new 
> header 
> ---------------------------------------------------------------------------------
>
>                 Key: CXF-4986
>                 URL: https://issues.apache.org/jira/browse/CXF-4986
>             Project: CXF
>          Issue Type: Bug
>          Components: JAX-RS
>    Affects Versions: 2.7.2
>         Environment: cxf on tomcat
>            Reporter: abdelgadiri
>            Assignee: Sergey Beryozkin
>             Fix For: 2.8.0, 2.7.5
>
>
> I have a filter implementation as follows
> @Provider
> public class AuthSessionFilter implements ContainerRequestFilter {
>     public AuthSessionFilter() {
>     }
>     @Override
>     public void filter(ContainerRequestContext requestContext) throws 
> IOException {      
>         //another @Prematching filter is setting this session id so it is 
> definitely not null
>         Object sessionId = requestContext.getProperty("sessionId");
>         if (sessionId == null || GeneralUtils.isNullOrBlank(sessionId + "")) {
>             
> requestContext.abortWith(Response.status(Response.Status.UNAUTHORIZED)
>                     .entity("missing sessionId").build());
>         }
>        //this line gets invoked without problems, however, the added header 
> is not available from the resource class
>         requestContext.getHeaders().putSingle("sessionId", sessionId+"");
>     }
> }
> The line requestContext.getHeaders().putSingle("sessionId", sessionId+""); is 
> not making the added sessionId header available when trying to obtain it from 
> my resource. getHeaders() is supposed to return a mutable map in accordance 
> with the spec, but its implementation 'ContainerRequestContextImpl' is 
> returning a readonly map instead. it returning:
>   return new MetadataMap<String, String>(
>             (Map<String, List<String>>)m.get(Message.PROTOCOL_HEADERS), 
> false, true, true);
> where it is passing 'true' for the readonly parameter.
> in my resource, I am trying to obtain the header using
> public Response doSomething(UriInfo uriInfo, HttpServletRequest request) {
>         //this is always null even though it shouldn't be null
>         String sessionId = request.getHeader("sessionId");
> }

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to