Skip to main content

Add/Modify Header Values in Java HttpServletRequest using Servlet Filters

Add/Modify Header Values in Java HttpServletRequest using Servlet Filters


Steps to Modify Request Headers in a Servlet Request.

This example will demonstrate how to modify 'Content-Type' header in Java Servlet Filter.

In order to achieve this, use a custom wrapper Class, that extends HttpServletRequestWrapper.

Thereafter, we need to override certain methods inside this custom Class.

  • getHeader(String name)
  • getHeaders(String name)
  • getHeaderNames()
  • getParameter(final String name)

Code snippet for overriding above methods.

    @Override
    public String getHeader(String name) {
    String header = super.getHeader(name);
if ("content-type".equalsIgnoreCase(name)){
System.out.println("Adds Header Content-Type as application/json");
return "application/json";
}
        return header;
    }
    
    @Override
    public Enumeration getHeaders(String name) {
        List values = Collections.list(super.getHeaders(name));
        if(name.equalsIgnoreCase("content-type")) {
            values.add("application/json");
        }
        return Collections.enumeration(values);
    }
    
    @Override
    public Enumeration getHeaderNames() {
        List names = Collections.list(super.getHeaderNames());
        names.addAll(Collections.list(super.getParameterNames()));
        String url = new String(((HttpServletRequest)super.getRequest()).getRequestURL());
if(!names.contains("content-type"))
names.add("content-type");
return Collections.enumeration(names);
    }
@Override
public String getParameter(String name) {
String paramValue = super.getParameter(name);
if (paramValue == null) {
paramValue = customHeaderMap.get(name);
}
return paramValue;
}





Comments

Popular posts from this blog

Fixing Keycloak Error : MediaType not set on path , with response status 200

Using a custom endpoint with Media Type set as 'Application/Json'. When this endpoint is accessed, below error is returned. ERROR [org.keycloak.headers.DefaultSecurityHeadersProvider] (default task-16) MediaType not set on path /auth/realms/my-realm/broker/keycloak-oidc/token, with response status 200 06:31:08,489 ERROR [org.keycloak.services.error.KeycloakErrorHandler] (default task-16) Uncaught server error: javax.ws.rs.InternalServerErrorException: HTTP 500 Internal Server Error at org.keycloak.keycloak-services@10.0.2//org.keycloak.headers.DefaultSecurityHeadersProvider.addHeaders(DefaultSecurityHeadersProvider.java:71) at org.keycloak.keycloak-services@10.0.2//org.keycloak.services.filters.KeycloakSecurityHeadersFilter.filter(KeycloakSecurityHeadersFilter.java:36) The fix for this is to bind the blank response to Application/Json as follows: return Response.ok(json, MediaType.APPLICATION_JSON).build(); Do try it out, and let me know if it works. Do drop some comments is an...

Keycloak empty User-Attribute causes NPE

Fixing NPE in Keycloak due to non-existent user attribute In Keycloak, an error might be encountered as below: ERROR [org.keycloak.services.error.KeycloakErrorHandler] (default task-1) Uncaught server error: java.lang.NullPointerException at org.keycloak.models.utils.KeycloakModelUtils.resolveAttribute(KeycloakModelUtils.java:414) at org.keycloak.models.utils.KeycloakModelUtils.resolveAttribute(KeycloakModelUtils.java:415) at org.keycloak.protocol.oidc.mappers.UserAttributeMapper.setClaim(UserAttributeMapper.java:93) at org.keycloak.protocol.oidc.mappers.UserAttributeMapper.setClaim(UserAttributeMapper.java:101) at org.keycloak.protocol.oidc.mappers.AbstractOIDCProtocolMapper.setClaim(AbstractOIDCProtocolMapper.java:117) at org.keycloak.protocol.oidc.mappers.AbstractOIDCProtocolMapper.setClaim(AbstractOIDCProtocolMapper.java:119) at org.keycloak.protocol.oidc.mappers.AbstractOIDCProtocolMapper.transformAccessToken(AbstractOIDCProtocolMapper.java:81) at org.keycloak.pro...