本文是 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;
}
}
执行步骤:
- 启动应用;
- 打开浏览器,访问 http://127.0.0.1:8080/cookie/read,浏览器显示:
Read username in cookie: null
- 访问 http://127.0.0.1:8080/cookie/write,浏览器显示:
Set Cookie: COOKIE_NAME_USERNAME=admin
- 再次访问 http://127.0.0.1:8080/cookie/read,浏览器显示:
Read username in cookie: admin
网友评论