[Bài đọc] Cookie trong Spring MVC

10. Session&Cookie

Đọc Http Cookie trong Spring MVC

Spring MVC framework cung cấp một annotation rất hữu ích là @CookieValue để truy cập tập dữ liệu trong bất kỳ http cookie nào. Annotation này có thể lấy ra cookie từ http request  và lặp qua danh sách cookie.

Annotation @CookieValue có thể được sử dụng trong Controller. Nó tự động liên kết giá trị cookie với đối số phương thức.

import org.springframework.web.bind.annotation.CookieValue;
        import org.springframework.web.bind.annotation.RequestMapping;
//..
@RequestMapping("/hello.html")
public String hello(@CookieValue("foo") String fooCookie) {

//..
}

Trong đoạn mã trên, chúng ta đã định nghĩa một phương thức điều khiển hello () được ánh xạ tới URL “/hello.html”. Ngoài ra, ta liên kết tham số “fooCookie” bằng cách sử dụng annotation @CookieValue. Khi Spring ánh xạ request, nó kiểm tra http cho cookie với tên là “foo” và liên kết giá trị của nó với “fooCookie”.

Một điều đáng chú ý ở đây là chúng ta chưa xác định bất kỳ giá trị mặc định nào cho “fooCookie”. Nếu Spring không tìm thấy cookie có tên là “foo” trong http request, thì nó sẽ đưa ra một ngoại lệ:

java.lang.IllegalStateException: Missing cookie value 'foo' of type java.lang.String

Để giải quyết vấn đề này, chúng ta phải thêm giá trị mặc định vào annotation @CookieValue để nếu Spring không tìm thấy http cookie với tên đó, nó sẽ liên kết tham số với giá trị mặc định. Sau đây là cú pháp:

import org.springframework.web.bind.annotation.CookieValue;
        import org.springframework.web.bind.annotation.RequestMapping;
//..
@RequestMapping("/hello.html")
public String hello(
@CookieValue(value = "foo", defaultValue = "hello") String fooCookie) {

        //..
        }

Chúng ta đã sử dụng giá trị và thuộc tính defaultValue của annotation @CookieValue. Do đó, nếu Spring không tìm thấy bất kỳ cookie nào có tên “foo” trong http request, nó sẽ liên kết tham số “fooCookie” với giá trị “hello”.

Thiết lập Http Cookie trong Spring MVC

Bây giờ chúng ta hãy xem cách thiết lập cookie trong ứng dụng dựa trên Spring MVC. Để thực hiện điều này, ta sẽ sử dụng phương thức addCookie () của lớp HTTPServletResponse. Spring không cung cấp bất kỳ cách ưa thích nào để thiết lập http cookie. Tất cả những gì bạn cần làm là sử dụng chỉ một phương thức addCookie (). Spring MVC có thể được sử dụng để lấy đối tượng response.

Xem xét đoạn mã dưới đây:

import javax.servlet.http.Cookie;
        import javax.servlet.http.HttpServletResponse;
        import org.springframework.web.bind.annotation.CookieValue;
        import org.springframework.web.bind.annotation.RequestMapping;
//..

@RequestMapping("/hello.html")
public String hello(HttpServletResponse response) {

        response.addCookie(new Cookie("foo", "bar"));

        //..      
        }

//..

Trong đoạn mã trên, chúng ta chỉ liên kết đối tượng HttpServletResponse với phương thức xử lý của Controller và sử dụng phương thức addCookie của nó để lưu Cookie mới.Một điều đáng chú ý ở đây là bạn có thể đặt thời gian hết hạn của cookie bằng phương thức setMaxAge trên lớp Cookie như sau:

Cookie foo = new Cookie("foo", "bar"); //bake cookie
foo.setMaxAge(1000); //set expire time to 1000 sec

        response.addCookie(foo); //put cookie in response 

Leave a Reply

Your email address will not be published. Required fields are marked *