簡體   English   中英

java - 在spring mvc中按名稱獲取cookie值

[英]java - get cookie value by name in 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;
}

這工作正常,我可以在我的瀏覽器控制台中看到名稱為test並且值為“value”的cookie。 現在我想在其他方法中按名稱獲取cookie值。 我怎樣才能獲得test cookie的價值?

最簡單的方法是在帶有@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"));

您還可以使用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已經為您提供了HttpServletRequest對象,它有一個返回Cookie[]getCookies()方法,因此您可以對其進行迭代。

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM