bobbyrne01
bobbyrne01

Reputation: 6735

Create a cookie using HttpServletRequest?

I've created a RenderingPlugin, for use in WebSphere Portal, which is invoked serverside before sending markup to client. The plugin loops through all cookies and if 'test' is not found, I'd like to set that cookie.

I know this is possible with a HttpServletResponse but the RenderingPlugin doesn't have access to that object. It only has a HttpServletRequest.

Is there another way to do this?

public class Request implements com.ibm.workplace.wcm.api.plugin.RenderingPlugin {

    @Override
    public boolean render(RenderingPluginModel rpm) throws RenderingPluginException {

        boolean found = false;

        HttpServletRequest servletRequest = (HttpServletRequest) rpm.getRequest();
        Cookie[] cookie = servletRequest.getCookies();

        // loop through cookies
        for (int i = 0; i < cookie.length; i++) {

            // if test found
            if (cookie[i].getName().equals("test")) {

                found = true;
            }
        }

        if (!found){

            // set cookie here
        }
    }
}

Upvotes: 5

Views: 3861

Answers (2)

Guilherme
Guilherme

Reputation: 897

I had a problem to simulate a cookie, that is only sending in production, in my test environment. I solve with HttpServletRequestWrapper in a filter.

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
        throws IOException, ServletException {
        Cookie cookie = new Cookie("Key", "Value");
        chain.doFilter(new CustomRequest((HttpServletRequest) request, cookie), response);
    }
}

class CustomRequest extends HttpServletRequestWrapper {
     private final Cookie cookie;

        public CustomRequest(HttpServletRequest request, Cookie cookie) {
            super(request);
            this.cookie = cookie;
        }

        @Override
        public Cookie[] getCookies() {
         //This is a example, get all cookies here and put your with a new Array
            return new Cookie[] {cookie};
        }
    }

This filter is only started in test environment. My class WebConfig take care of this:

 @HandlesTypes(WebApplicationInitializer.class)
 public class WebConfig implements WebApplicationInitializer

Upvotes: 0

Ahmed M
Ahmed M

Reputation: 71

Did you try using javascript code to set the cookie ?

<script>
document.cookie = "test=1;path=/";
</script>

you send this as part of the content you give to the Writer rpm.getWriter() and it will be executed by the browser.

Upvotes: 1

Related Questions