+
80
-

spring boot如何设置浏览器cookie?

spring boot如何设置浏览器COOKIE?

网友回复

+
0
-

1、设置COOKIE

通过 new COOKIE("COOKIE名", "值")来设置,让后通过HttpServletResponse.addCOOKIE发送浏览器添加COOKIE,代码如下:

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.COOKIE;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.net.http.HttpResponse;

@Controller
public class HelloController {
    @RequestMapping("/hello")
    @ResponseBody
    public String Index(HttpServletResponse response) {
        COOKIE COOKIE = new COOKIE("username", "bfw");
        //将COOKIE对象加入response响应
        response.addCOOKIE(COOKIE);
        return "hello";
    }
}

2、读取单个COOKIE

Spring框架提供@COOKIEValue注释来获取HTTP COOKIE的值,此注解可直接用在控制器方法参数中。

@GetMapping("/")
public String readCOOKIE(@COOKIEValue(value = "username",defaultValue = "Atta") String username) {
    return "Hey! My username is " + username;
}

在上述代码段中,请注意defaultValue = "Atta"。如果没有设置默认值,并且没有找到名称为username的COOKIE,Spring将抛出java.lang.IllegalStateException异常。

3、读取所有COOKIE[]

除了使用@COOKIEValue注解,我们还可以使用HttpServletRequest类作为控制器方法参数来读取所有COOKIE。此类提供了getCOOKIEs()方法,该方法以数组形式返回浏览器发送的所有COOKIE。

@GetMapping("/all-COOKIEs")
public String readAllCOOKIEs(HttpServletRequest request) {

	COOKIE[] COOKIEs = request.getCOOKIEs();
	if (COOKIEs != null) {
		return Arrays.stream(COOKIEs).map(c -> c.getName() + "=" + c.getValue()).collect(Collectors.joining(", "));
	}

	return "No COOKIEs";
}

4、为COOKIE设置过期时间

如果没有为COOKIE指定过期时间,则其生命周期将持续到Session过期为止。这样的COOKIE称为会话COOKIE。会话COOKIE保持活动状态,直到用户关闭其浏览器或清除其COOKIE。但是您可以覆盖此默认行为,并使用类的setMaxAge()方法设置COOKIE的过期时间。

// 创建一个 COOKIE对象
COOKIE COOKIE = new COOKIE("username", "Jovan");
COOKIE.setMaxAge(7 * 24 * 60 * 60); // 7天过期

//将COOKIE对象加入response响应
response.addCOOKIE(COOKIE);

现在,usernameCOOKIE不会因为Seesion结束到期,而是会在接下来的7天保持有效。传递给setMaxAge()方法的到期时间以秒为单位。到期日期和时间是相对于设置COOKIE的客户端而不是服务器而言的。 5、Https与COOKIE

我们需要了解一个概念:什么的安全的COOKIEs?安全的COOKIE是仅可以通过加密的HTTPS连接发送到服务器的COOKIE。无法通过未加密的HTTP连接将COOKIE发送到服务器。也就是说,如果设置了setSecure(true),该COOKIE将无法在Http连接中传输,只能是Https连接中传输。

// 创建一个 COOKIE对象
COOKIE COOKIE = new COOKIE("username", "Jovan");
COOKIE.setSecure(true); //Https 安全COOKIE

//将COOKIE对象加入response响应
response.addCOOKIE(COOKIE);

6、HttpOnly COOKIE

HttpOnly COOKIE用于防止跨站点脚本(XSS)攻击,也就是说设置了Http Only的COOKIE不能通过JavaScript的Document.COOKIEAPI访问,仅能在服务端由服务器程序访问。

// 创建一个 COOKIE对象
COOKIE COOKIE = new COOKIE("username", "Jovan");
COOKIE.setHttpOnly(true); //不能被js访问的COOKIE

//将COOKIE对象加入response响应
response.addCOOKIE(COOKIE);

7、删除COOKIE

要删除COOKIE,需要将Max-Age设置为0,并且将COOKIE的值设置为null。不要将Max-Age指令值设置为-1负数。否则,浏览器会将其视为会话COOKIE。

// 将COOKIE的值设置为null
COOKIE COOKIE = new COOKIE("username", null);
//将`Max-Age`设置为0
COOKIE.setMaxAge(0);

response.addCOOKIE(COOKIE);

我知道答案,我要回答