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