How to use cookies with spring

Writting a cookie

You can make the browser to save a cookie by adding it to the response like is shown in this snipplet:

@RequestMapping("/general")
@Controller
public class GeneralController {	
    @RequestMapping(value = "/mycookie/{type}", produces = "text/html")
    public String changeType(@PathVariable("type") String type, 
                             Model uiModel,
                             HttpServletResponse response){
    	Cookie c=new Cookie("mode", type);  
   	c.setPath("/");
    	response.addCookie(c);
    	return "redirect:/";
    }        
}

The property c.setPath(“/”); is done because we want that cookie valid over the whole web domain.

Reading from a controller

If you want to read the value of a cookie from a controller you can use the @CookieValue annotation:

public @ResponseBody String fileuploader(@PathVariable("fileid") String id, 
    HttpServletRequest request,
    HttpServletResponse response,
    @CookieValue("mode") String cookieMode) 
    throws IOException{    	    	                       
[...]
    		if (!"expectedCookieValue".equals(cookieMode)){
		    //Do something
    		}
[...]
}

In this case the String variable cookieMode will have the content of the cookie mode, if that cookie is not present its value will be null

Reading from JSTL

It is also possible to read the cookie from JSTL and change the view accordingly. Here is an example of how to do it:

<c:if test="${cookie.mode.value!='expectedCookieValue'}">
   <p> The cookie has the expected Value</p>
</c:if>
Advertisements