Spring Boot 处理 Cookie

本文是 Spring Boot 2 处理 Cookie 的代码示例(实际上属于 Spring MVC 范围)。

package tutorial.spring.boot.mvc.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;

@RestController
@RequestMapping("/cookie")
public class CookieController {

    private static final String COOKIE_NAME_USERNAME = "username";

    @Autowired
    private HttpServletResponse response;

    @GetMapping("/read")
    public String readCookie(@CookieValue(name = COOKIE_NAME_USERNAME, required = false) String username) {
        return "Read username in cookie: " + username;
    }

    @GetMapping("/write")
    public String writeCookie() {
        String username = "admin";
        Cookie usernameCookie = new Cookie(COOKIE_NAME_USERNAME, username);
        /*
         * Cookie 失效时间:3600 秒
         * 1.如果为正数,则该Cookie在maxAge秒之后失效。
         * 2.如果为负数,该Cookie为临时Cookie,关闭浏览器即失效,浏览器也不会以任何形式保存该Cookie。
         * 3.如果为[0],表示删除该Cookie。
         * 默认为[–1],即关闭浏览器即失效。
         */
        usernameCookie.setMaxAge(3600);
        // 该Cookie的用处说明,浏览器显示Cookie信息的时候显示该说明。
        usernameCookie.setComment("用户账号");
        /*
         * 可以访问该Cookie的域名。
         * 如果设置为[.google.com],则所有以[google.com]结尾的域名都可以访问该Cookie。
         * 注意第一个字符必须为[.]
         */
        // usernameCookie.setDomain(".google.com");
        usernameCookie.setHttpOnly(true);
        /*
         * 该Cookie的使用路径。
         * 1.如果设置为[/xyz/],则只有ContextPath为[/xyz]的程序可以访问该Cookie。
         * 2.如果设置为[/],则本域名下ContextPath都可以访问该Cookie。
         * 注意最后一个字符必须为[/]!
         */
        usernameCookie.setPath("/");
        // 是否仅被用于安全协议传输,如:HTTPS,SSL等。
        usernameCookie.setSecure(false);
        /*
         * 该Cookie使用的版本号。
         * -> [0]表示遵循Netscape的Cookie规范
         * -> [1]表示遵循W3C的RFC 2109规范
         */
        usernameCookie.setVersion(1);
        response.addCookie(usernameCookie);
        return "Set Cookie: COOKIE_NAME_USERNAME=" + username;
    }
}

执行步骤:

  1. 启动应用;
  2. 打开浏览器,访问 http://127.0.0.1:8080/cookie/read,浏览器显示:
Read username in cookie: null
  1. 访问 http://127.0.0.1:8080/cookie/write,浏览器显示:
Set Cookie: COOKIE_NAME_USERNAME=admin
  1. 再次访问 http://127.0.0.1:8080/cookie/read,浏览器显示:
Read username in cookie: admin

你可能感兴趣的:(Spring Boot 处理 Cookie)