java - 在spring mvc中按名称获取cookie值
Posted
技术标签:
【中文标题】java - 在spring mvc中按名称获取cookie值【英文标题】:java - get cookie value by name in spring mvc 【发布时间】:2016-01-12 03:05:52 【问题描述】:我正在开发一个 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;
这工作正常,我可以在我的浏览器控制台中看到一个名为 test
和值“值”的 cookie。现在我想在其他方法中按名称获取 cookie 值。如何获得test
cookie 的值?
【问题讨论】:
您应该接受 meskobalazs 或 ryanp 的回答。 你真的应该接受@Frans所说的答案,它可以帮助其他有同样问题的人找到正确的答案 【参考方案1】:Spring MVC 已经为您提供了HttpServletRequest
对象,它有一个返回Cookie[]
的getCookies()
方法,因此您可以对其进行迭代。
【讨论】:
还有别的办法吗?我不想遍历 cookie 数组,因为那是一个大数组。 即使您不手动迭代它,框架也会为您完成,因为 cookie 存储在单个字符串中。【参考方案2】:最简单的方法是在带有@CookieValue
注解的控制器中使用它:
@RequestMapping("/hello")
public String hello(@CookieValue("foo") String fooCookie)
// ...
否则,您可以使用 Spring org.springframework.web.util.WebUtils
从 servlet 请求中获取它
WebUtils.getCookie(HttpServletRequest request, String cookieName)
顺便说一句,粘贴到问题中的代码可以稍微改进一下。这比使用#setHeader()
更优雅:
response.addCookie(new Cookie("test", "value"));
【讨论】:
您可能希望在 @CookieValue 注释上添加“required = false”以避免收到 400 Bad Request。 @evandor 有没有办法捕获 400 空响应并返回其他内容。这仍然是 400,但不会为空。类似于@GlobalExceptionHandler
所做的事情
@kerw 我正在为此添加一个请求过滤器。
你也可以用defaultValue="yourDeafultValue"
代替"required = false"
。【参考方案3】:
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();
【讨论】:
【参考方案4】:您也可以使用org.springframework.web.util.WebUtils.getCookie(HttpServletRequest, String)
。
【讨论】:
【参考方案5】:private String extractCookie(HttpServletRequest req)
for (Cookie c : req.getCookies())
if (c.getName().equals("myCookie"))
return c.getValue();
return null;
【讨论】:
【参考方案6】:private String getCookieValue(HttpServletRequest req, String cookieName)
return Arrays.stream(req.getCookies())
.filter(c -> c.getName().equals(cookieName))
.findFirst()
.map(Cookie::getValue)
.orElse(null);
【讨论】:
如果cookies为空,则发生空异常 抛出异常而不是抛出 null。 .orElseThrow(UnAuthorizedException::new)以上是关于java - 在spring mvc中按名称获取cookie值的主要内容,如果未能解决你的问题,请参考以下文章
JAVA spring MVC 前台如何取得后台返回的map类型的数据?