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
?
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"));
Vous pouvez également utiliser org.springframework.web.util.WebUtils.getCookie(HttpServletRequest, String)
.
private String getCookieValue(HttpServletRequest req, String cookieName) {
return Arrays.stream(req.getCookies())
.filter(c -> c.getName().equals(cookieName))
.findFirst()
.map(Cookie::getValue)
.orElse(null);
}
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.
private String extractCookie(HttpServletRequest req) {
for (Cookie c : req.getCookies()) {
if (c.getName().equals("myCookie"))
return c.getValue();
}
return null;
}
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();
}
}