2015-10-14 9 views
16

Ich arbeite an einer Java-Spring-Mvc-Anwendung. Ich habe ein Cookie in einem meiner Controller Methoden auf diese Weise eingestellt:java - Cookie-Wert nach Name im Frühjahr mvc

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

Dies funktioniert gut und ich kann ein Cookie mit dem Namen test und Wert „Wert“ in meinem Browser-Konsole sehen. Jetzt möchte ich den Cookie-Wert namentlich auf andere Weise erhalten. Wie kann ich einen Wert von test cookie erhalten?

+0

Sie sollten entweder meskobalazs oder die ryanp Antwort akzeptieren. – Frans

+0

Sie sollten wirklich eine Antwort akzeptieren wie @Frans sagte, es hilft anderen mit den gleichen Problemen die richtigen Antworten zu finden –

Antwort

3

Spring MVC gibt Ihnen bereits das Objekt HttpServletRequest, es hat eine getCookies() Methode, die Cookie[] zurückgibt, damit Sie darauf iterieren können.

+0

Gibt es einen anderen Weg? Ich möchte das Cookie-Array nicht durchlaufen, weil das ein großes Array ist. – hamed

+0

Auch wenn Sie nicht manuell über iterieren, das Framework wird es trotzdem für Sie tun, da die Cookies in einer einzigen Zeichenfolge gespeichert sind. – meskobalazs

41

Der einfachste Weg, um es in einer Steuerung mit der @CookieValue Anmerkung verwendet:

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

Andernfalls Sie es von der Servlet-Anfrage mit Spring org.springframework.web.util.WebUtils

WebUtils.getCookie(HttpServletRequest request, String cookieName) 

Durch die Quere kommen können, die Code eingefügt in die Frage könnte ein wenig verfeinert werden. Statt #setHeader() zu verwenden, das ist viel eleganter:

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

Plätzchen tut Methode Wert erhalten haben versuchen, diese

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

Sie auch org.springframework.web.util.WebUtils.getCookie(HttpServletRequest, String) verwenden können.

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