2012-01-17 7 views
13

tworzę niestandardową usługę uwierzytelniania w mojej aplikacji MVC wiosny:jak utworzyć plik cookie i dodać do odpowiedzi http z poziomu mojej warstwy usługi?

@Service 
public class AuthenticationServiceImpl implements AuthenticationService { 

    @Autowired 
    UserService userService; 

    @Override 
    public void login(String email, String password) { 

     boolean isValid = userService.isValidLogin(email, password); 

     if(isValid) { 
      // ??? create a session cookie and add to http response 
     } 

    } 

} 

Jak mogę utworzyć i dodać plik cookie do odpowiedzi?

Odpowiedz

16

Wiosną MVC domyślnie otrzymujesz obiekt HtppServletResponce.

@RequestMapping("/myPath.htm") 
    public ModelAndView add(HttpServletRequest request, 
     HttpServletResponse response) throws Exception{ 
      //Do service call passing the response 
    return new ModelAndView("CustomerAddView"); 
    } 

//Service code 
Cookie myCookie = 
    new Cookie("name", "val"); 
    response.addCookie(myCookie); 
0

Aby dodać nowe ciasteczko, użyj HttpServletResponse.addCookie(Cookie). Cookie to w zasadzie para kluczowej wartości, która przyjmuje nazwę i wartość jako ciągi znaków w konstrukcji.

+1

BTW, ja nie polecam to zrobić, aby stworzyć swój własny system uwierzytelniania. –

18

Po @ odpowiedź Aravind jest więcej szczegółów

@RequestMapping("/myPath.htm") 
public ModelAndView add(HttpServletRequest request, HttpServletResponse response) throws Exception{ 
    myServiceMethodSettingCookie(request, response);  //Do service call passing the response 
    return new ModelAndView("CustomerAddView"); 
} 

// service method 
void myServiceMethodSettingCookie(HttpServletRequest request, HttpServletResponse response){ 
    final String cookieName = "my_cool_cookie"; 
    final String cookieValue = "my cool value here !"; // you could assign it some encoded value 
    final Boolean useSecureCookie = false; 
    final int expiryTime = 60 * 60 * 24; // 24h in seconds 
    final String cookiePath = "/"; 

    Cookie cookie = new Cookie(cookieName, cookieValue); 

    cookie.setSecure(useSecureCookie); // determines whether the cookie should only be sent using a secure protocol, such as HTTPS or SSL 

    cookie.setMaxAge(expiryTime); // A negative value means that the cookie is not stored persistently and will be deleted when the Web browser exits. A zero value causes the cookie to be deleted. 

    cookie.setPath(cookiePath); // The cookie is visible to all the pages in the directory you specify, and all the pages in that directory's subdirectories 

    response.addCookie(cookie); 
} 

Powiązane dokumentów:

http://docs.oracle.com/javaee/7/api/javax/servlet/http/Cookie.html

http://docs.spring.io/spring-security/site/docs/3.0.x/reference/springsecurity.html

5

Cookie to obiekt o parę wartości klucza do przechowywania informacji związany z klient. Głównym celem jest personalizacja doświadczeń klienta.

Metoda narzędzie może zostać utworzony jak

private Cookie createCookie(String cookieName, String cookieValue) { 
    Cookie cookie = new Cookie(cookieName, cookieValue); 
    cookie.setPath("/"); 
    cookie.setMaxAge(MAX_AGE_SECONDS); 
    cookie.setHttpOnly(true); 
    cookie.setSecure(true); 
    return cookie; 
} 

Jeśli przechowywania ważnych informacji to powinniśmy zawsze dostawaliśmy umieścić setHttpOnly tak, że nie można uzyskać cookie/zmodyfikowany poprzez javascript. setSecure ma zastosowanie, jeśli chcesz, aby pliki cookie były dostępne tylko za pośrednictwem protokołu https.

użyciu powyższej metody użytkowego można dodać cookies do odpowiedzi jako

Cookie cookie = createCookie("name","value"); 
response.addCookie(cookie); 
Powiązane problemy