web-dev-qa-db-fra.com

java - récupère la valeur du cookie par nom au printemps mvc

Je travaille sur une application Java Spring MVC. J'ai défini un cookie dans l'une des méthodes de mon contrôleur de la manière suivante:

@RequestMapping(value = {"/news"}, method = RequestMethod.GET)
public ModelAndView news(Locale locale, Model model, HttpServletResponse response, HttpServletRequest request) throws Exception {

    ...
    response.setHeader("Set-Cookie", "test=value; Path=/");
    ...

    modelAndView.setViewName("path/to/my/view");
    return modelAndView;
}

Cela fonctionne bien et je peux voir un cookie avec le nom test et la valeur "value" dans la console de mon navigateur. Maintenant, je veux obtenir la valeur du cookie par nom dans une autre méthode. Comment puis-je obtenir la valeur du cookie test?

29
hamed

Le moyen le plus simple consiste à l'utiliser dans un contrôleur avec l'annotation @CookieValue:

@RequestMapping("/hello")
public String hello(@CookieValue("foo") String fooCookie) {
    // ...
}

Sinon, vous pouvez l'obtenir à partir de la demande de servlet en utilisant Spring org.springframework.web.util.WebUtils

WebUtils.getCookie(HttpServletRequest request, String cookieName)

À propos, le code collé dans la question pourrait être un peu affiné. Au lieu d'utiliser #setHeader(), c'est beaucoup plus élégant:

response.addCookie(new Cookie("test", "value"));
68
meskobalazs

Vous pouvez également utiliser org.springframework.web.util.WebUtils.getCookie(HttpServletRequest, String).

8
ryanp
private String getCookieValue(HttpServletRequest req, String cookieName) {
    return Arrays.stream(req.getCookies())
            .filter(c -> c.getName().equals(cookieName))
            .findFirst()
            .map(Cookie::getValue)
            .orElse(null);
}
4
ottercoder

Spring MVC vous donne déjà l'objet HttpServletRequest, il a une méthode getCookies() qui renvoie Cookie[] afin que vous puissiez en effectuer une itération. 

3
bekce
private String extractCookie(HttpServletRequest req) {
            for (Cookie c : req.getCookies()) {
               if (c.getName().equals("myCookie"))
                   return c.getValue();
               }
            return null;
        }
1
Padi

Cookie n'a pas de méthode pour obtenir par valeur, essayez ceci

Cookie cookie[]=request.getCookies();
Cookie cook;
String uname="",pass="";
if (cookie != null) {
for (int i = 0; i < cookie.length; i++) {
    cook = cookie[i];
    if(cook.getName().equalsIgnoreCase("loginPayrollUserName"))
            uname=cook.getValue();
    if(cook.getName().equalsIgnoreCase("loginPayrollPassword"))
            pass=cook.getValue();                   
}    
}
0
Vishnu Katpure