Java - получить значение cookie по имени в spring mvc

Я работаю над приложением java spring mvc. Я установил файл cookie одним из моих методов контроллера таким образом:

@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;
}

Это работает отлично, и я вижу cookie с именем test и значением "value" в моей консоли браузера. Теперь я хочу получить значение cookie по имени другим способом. Как я могу получить значение test cookie?

Ответы

Ответ 1

Самый простой способ - использовать его в контроллере с аннотацией @CookieValue:

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

В противном случае вы можете получить его из запроса сервлета, используя Spring org.springframework.web.util.WebUtils

WebUtils.getCookie(HttpServletRequest request, String cookieName)

Кстати, код, вставленный в вопрос, можно немного уточнить. Вместо использования #setHeader() это намного более элегантно:

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

Ответ 2

Вы также можете использовать org.springframework.web.util.WebUtils.getCookie(HttpServletRequest, String).

Ответ 3

Spring MVC уже предоставляет объект HttpServletRequest, у него есть метод getCookies(), который возвращает Cookie[], чтобы вы могли повторить его.

Ответ 4

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

Ответ 5

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

Ответ 6

Cookie не имеет метода для достижения значения.

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();                   
}    
}