cookie的使用一般用来携带用户信息做身份验证,这里做一些简单的使用cookie,不结合业务,如下:这里没有做cookie的加密处理,一般设置cookie的时候需要加密,加密规则如md5,base64等等。
public class CookieUtils {
/**
* 获取cookie集合
* @param request
* @return
*/
public static Cookie[] getCookies(HttpServletRequest request){
Cookie[] cookies = request.getCookies();
return cookies;
}
/**
* 设置cookie的值
* @param request
* @param response
* @param cookieName
* @param cookieValue
* @param time
*/
public static void setCookie(HttpServletRequest request, HttpServletResponse response,String cookieName,String cookieValue,Integer time){
Cookie cookie=new Cookie(cookieName,cookieValue);
//设置过期时间
if(time>0){
cookie.setMaxAge(time);
}
//可在同一应用服务器内共享
cookie.setPath("/");
//设置跨域共享cookie,tomcat8.0之前以.开头,8.0之后就不需要了
//cookie.setDomain("demo.com");
response.addCookie(cookie);
}
/**
* 修改、删除Cookie时,新建的Cookie除value、maxAge之外的所有属性,例如name、path、domain等,都要与原Cookie完全一样。
* 否则,浏览器将视为两个不同的Cookie不予覆盖,导致修改、删除失败。
* @param request
* @param response
* @param cookieName
*/
public static void deleteCookie(HttpServletRequest request, HttpServletResponse response,String cookieName){
Cookie[] cookies = request.getCookies();
if(null!=cookies) {
for (Cookie cookie : cookies) {
if (cookie.getName().equals(cookieName)) {
cookie.setValue(null);
cookie.setMaxAge(0);// 立即销毁cookie
cookie.setPath("/");
System.out.println("被删除的cookie名字为:" + cookie.getName());
response.addCookie(cookie);
break;
}
}
}
}
/**
* 修改cookie
* @param request
* @param response
* @param cookieName
* @param time
*/
public static void updateCookie(HttpServletRequest request, HttpServletResponse response,String cookieName,String cookieValue,Integer time){
Cookie[] cookies = request.getCookies();
if(null!=cookies) {
for(Cookie cookie : cookies){
if(cookie.getName().equals(cookieName)){
cookie.setValue(cookieValue);
cookie.setPath("/");
cookie.setMaxAge(time);
response.addCookie(cookie);
break;
}
}
}
}
/**
* 根据名称获取具体的cookie值
* @param request
* @param cookieName
* @return
*/
public static String getCookieByName(HttpServletRequest request,String cookieName){
Cookie[] cookies = request.getCookies();
if(null!=cookies) {
for(Cookie cookie : cookies){
if(cookie.getName().equals(cookieName)){
return cookie.getValue();
}
}
}
return "";
}
}
简单测试:
@RestController
@RequestMapping("/cookie")
@Slf4j
public class CookieController {
/**
* 获取所有cookie
* @return
*/
@GetMapping("/getCookies")
public void getCookies(HttpServletRequest request){
Cookie[] cookies = CookieUtils.getCookies(request);
for(int i=0;i<cookies.length;i++){
log.info("cookie的name:{},cookie的值:{}",cookies[i].getName(),cookies[i].getValue());
}
}
@GetMapping("/setCookie")
public void setCookie(HttpServletRequest request, HttpServletResponse response,String name,String value){
//An invalid character [32] was present in the Cookie value 不能含有空格
CookieUtils.setCookie(request,response,name,value,-1);
log.info("设置cookie的值成功");
}
@GetMapping("/updateCookie")
public void updateCookie(HttpServletRequest request, HttpServletResponse response,String name,String value){
CookieUtils.updateCookie(request,response,name,value,-1);
log.info("修改cookie的值成功");
}
@GetMapping("/deleteCookie")
public void deleteCookie(HttpServletRequest request, HttpServletResponse response,String name){
CookieUtils.deleteCookie(request,response,name);
log.info("删除cookie的值成功");
}
@GetMapping("/get")
public void getCookie(HttpServletRequest request,String name){
String v= CookieUtils.getCookieByName(request, name);
log.info("获取cookie的值成功:"+v);
}
}
测试结果: