自定义的操作cookie的工具类(代码片段)

wcyer wcyer     2023-04-25     419

关键词:

可以在SpringMVC等环境中使用的操作Cookie的工具类

技术图片
package utils;

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;

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


/**
 * 
 * Cookie 工具类
 *
 */
public final class CookieUtil 

    /**
     * 得到Cookie的值, 不编码
     * 
     * @param request
     * @param cookieName
     * @return
     */
    public static String getCookieValue(HttpServletRequest request, String cookieName) 
        return getCookieValue(request, cookieName, false);
    

    /**
     * 得到Cookie的值,
     * 
     * @param request
     * @param cookieName
     * @return
     */
    public static String getCookieValue(HttpServletRequest request, String cookieName, boolean isDecoder) 
        Cookie[] cookieList = request.getCookies();
        if (cookieList == null || cookieName == null) 
            return null;
        
        String retValue = null;
        try 
            for (int i = 0; i < cookieList.length; i++) 
                if (cookieList[i].getName().equals(cookieName)) 
                    if (isDecoder) 
                        retValue = URLDecoder.decode(cookieList[i].getValue(), "UTF-8");
                     else 
                        retValue = cookieList[i].getValue();
                    
                    break;
                
            
         catch (UnsupportedEncodingException e) 
            e.printStackTrace();
        
        return retValue;
    

    /**
     * 得到Cookie的值,
     * 
     * @param request
     * @param cookieName
     * @return
     */
    public static String getCookieValue(HttpServletRequest request, String cookieName, String encodeString) 
        Cookie[] cookieList = request.getCookies();
        if (cookieList == null || cookieName == null) 
            return null;
        
        String retValue = null;
        try 
            for (int i = 0; i < cookieList.length; i++) 
                if (cookieList[i].getName().equals(cookieName)) 
                    retValue = URLDecoder.decode(cookieList[i].getValue(), encodeString);
                    break;
                
            
         catch (UnsupportedEncodingException e) 
             e.printStackTrace();
        
        return retValue;
    

    /**
     * 设置Cookie的值 不设置生效时间默认浏览器关闭即失效,也不编码
     */
    public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName,
            String cookieValue) 
        setCookie(request, response, cookieName, cookieValue, -1);
    

    /**
     * 设置Cookie的值 在指定时间内生效,但不编码
     */
    public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName,
            String cookieValue, int cookieMaxage) 
        setCookie(request, response, cookieName, cookieValue, cookieMaxage, false);
    

    /**
     * 设置Cookie的值 不设置生效时间,但编码
     */
    public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName,
            String cookieValue, boolean isEncode) 
        setCookie(request, response, cookieName, cookieValue, -1, isEncode);
    

    /**
     * 设置Cookie的值 在指定时间内生效, 编码参数
     */
    public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName,
            String cookieValue, int cookieMaxage, boolean isEncode) 
        doSetCookie(request, response, cookieName, cookieValue, cookieMaxage, isEncode);
    

    /**
     * 设置Cookie的值 在指定时间内生效, 编码参数(指定编码)
     */
    public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName,
            String cookieValue, int cookieMaxage, String encodeString) 
        doSetCookie(request, response, cookieName, cookieValue, cookieMaxage, encodeString);
    

    /**
     * 删除Cookie带cookie域名
     */
    public static void deleteCookie(HttpServletRequest request, HttpServletResponse response,
            String cookieName) 
        doSetCookie(request, response, cookieName, "", -1, false);
    

    /**
     * 设置Cookie的值,并使其在指定时间内生效
     * 
     * @param cookieMaxage cookie生效的最大秒数
     */
    private static final void doSetCookie(HttpServletRequest request, HttpServletResponse response,
            String cookieName, String cookieValue, int cookieMaxage, boolean isEncode) 
        try 
            if (cookieValue == null) 
                cookieValue = "";
             else if (isEncode) 
                cookieValue = URLEncoder.encode(cookieValue, "utf-8");
            
            Cookie cookie = new Cookie(cookieName, cookieValue);
            if (cookieMaxage > 0)
                cookie.setMaxAge(cookieMaxage);
            if (null != request) // 设置域名的cookie
                String domainName = getDomainName(request);
                System.out.println(domainName);
                if (!"localhost".equals(domainName)) 
                    cookie.setDomain(domainName);
                
            
            cookie.setPath("/");
            response.addCookie(cookie);
         catch (Exception e) 
             e.printStackTrace();
        
    

    /**
     * 设置Cookie的值,并使其在指定时间内生效
     * 
     * @param cookieMaxage cookie生效的最大秒数
     */
    private static final void doSetCookie(HttpServletRequest request, HttpServletResponse response,
            String cookieName, String cookieValue, int cookieMaxage, String encodeString) 
        try 
            if (cookieValue == null) 
                cookieValue = "";
             else 
                cookieValue = URLEncoder.encode(cookieValue, encodeString);
            
            Cookie cookie = new Cookie(cookieName, cookieValue);
            if (cookieMaxage > 0)
                cookie.setMaxAge(cookieMaxage);
            if (null != request) // 设置域名的cookie
                String domainName = getDomainName(request);
                System.out.println(domainName);
                if (!"localhost".equals(domainName)) 
                    cookie.setDomain(domainName);
                
            
            cookie.setPath("/");
            response.addCookie(cookie);
         catch (Exception e) 
             e.printStackTrace();
        
    

    /**
     * 得到cookie的域名
     */
    private static final String getDomainName(HttpServletRequest request) 
        String domainName = null;

        String serverName = request.getRequestURL().toString();
        if (serverName == null || serverName.equals("")) 
            domainName = "";
         else 
            serverName = serverName.toLowerCase();
            serverName = serverName.substring(7);
            final int end = serverName.indexOf("/");
            serverName = serverName.substring(0, end);
            final String[] domains = serverName.split(".");
            int len = domains.length;
            if (len > 3) 
                // www.xxx.com.cn
                domainName = "." + domains[len - 3] + "." + domains[len - 2] + "." + domains[len - 1];
             else if (len <= 3 && len > 1) 
                // xxx.com or xxx.cn
                domainName = "." + domains[len - 2] + "." + domains[len - 1];
             else 
                domainName = serverName;
            
        

        if (domainName != null && domainName.indexOf(":") > 0) 
            String[] ary = domainName.split(":");
            domainName = ary[0];
        
        return domainName;
    

技术图片

 应用如

技术图片
    @Autowired
    private HttpServletRequest request;

    @Autowired
    private HttpServletResponse response;

    /**
     * 准备方法获取cookie中的uuid,如果cookie中没有uuid生成uuid并保存到cookie中
     */
    public String getUuid()
        String uuid = CookieUtil.getCookieValue(request, "uuid","utf-8");

        //从cookie中获取的uuid为null或者有具体的值
        if(uuid == null || uuid.equals(""))
            uuid = UUID.randomUUID().toString(); //XXXX-XXXX-XXXXXXXXX
            //将生成的uuid存入cookie中
            CookieUtil.setCookie(request, response, "uuid", uuid,48*60*60, "utf-8");
        
        return uuid;
    

后端自定义runtimeexception工具类校验前端输入,使前端节约3000行代码(代码片段)

文章目录1.自定义MyInfoException工具类extneds后端RunTimeException工具类2.统一的响应类2.校验类的封装2.1后端的controller层会调用这个方法,可以知道如果异常会默认抛出自定义的异常码500,和相关的方法内的异常消息。3.前端的... 查看详情

后端自定义runtimeexception工具类校验前端输入,使前端节约3000行代码(代码片段)

文章目录1.自定义MyInfoException工具类extneds后端RunTimeException工具类2.统一的响应类2.校验类的封装2.1后端的controller层会调用这个方法,可以知道如果异常会默认抛出自定义的异常码500,和相关的方法内的异常消息。3.前端的... 查看详情

自定义线程池工具类(代码片段)

importjava.util.concurrent.*;/***线程池工具类:* 处理项目中需要异步处理的任务,例如日志服务,监控服务等*@authorzsc*@datetime2017年11月22日上午11:04:09*/publicclassThreadPoolUtil /**工具类,构造方法私有化*/ priva 查看详情

如何自定义线程池工具类(threadpoolutils)(代码片段)

...java.util.concurrent.ThreadPoolExecutor2.线程池核心参数了解在自定义线程池之前先来了解一下在创建并初始化线程池时有那些所需知的前置条件(线程池有那些核心参数),详细入下代码:publicThreadPoolExecutor(intcorePoolSize,//线程池核... 查看详情

如何自定义线程池工具类(threadpoolutils)(代码片段)

...java.util.concurrent.ThreadPoolExecutor2.线程池核心参数了解在自定义线程池之前先来了解一下在创建并初始化线程池时有那些所需知的前置条件(线程池有那些核心参数),详细入下代码:publicThreadPoolExecutor(intcorePoolSize,//线程池核... 查看详情

实用的悬浮窗工具类(代码片段)

...,简化了悬浮窗的创建显示和隐藏等步骤,并预定义了上中下三种简单的进场退场动画,拓展了悬浮窗自定义消失时间的功能。使用方法很简单:1.实例化悬浮窗工具类FloatViewFloatViewfloatView=newFloatView(context);2.传入需... 查看详情

thinkphp3验证码文件上传缩略图分页(自定义工具类session和cookie)

验证码TP框架中自带了验证码类位置:Think/verify.class.php在LoginController控制器中创建生存验证码的方法login.html登陆模板中在LoginController控制器中判断验证码是否正确并且判断登陆是否成功文件上传用到的知识点: 1、文件上传... 查看详情

自定义无内存泄漏的handler内部类(代码片段)

最近做项目有很多需要在子线程中进行耗时操作,因为操作也比较简单,也就是单纯的发送网络请求然后处理回调更新UI,所以选择了Thread+Runnable+Handler的组合。然后有了最初的代码:代码片段1:SGAddressF... 查看详情

xposed自定义参数(代码片段)

...方法等一系列操作。目标函数为TestArray,其参数为我们自定义的Person类的数组。publicclasstestpublicstaticvoidmain(String[]args)Personperson1=newPerson("aa",12,"male");Personperson2=newPerson("ab 查看详情

java后端cookie工具类(设置cookie有效时间得到cookie的域名等方法)(代码片段)

在这里总结一些后端处理Cookie的工具类方法,供参考调用就可以这样//设置cookieCookieUtils.setCookie(request,response,"user",JSONObject.toJSONString(usersVO),true);//清除cookieCookieUtils.deleteCookie(request,response," 查看详情

java后端cookie工具类(设置cookie有效时间得到cookie的域名等方法)(代码片段)

在这里总结一些后端处理Cookie的工具类方法,供参考调用就可以这样//设置cookieCookieUtils.setCookie(request,response,"user",JSONObject.toJSONString(usersVO),true);//清除cookieCookieUtils.deleteCookie(request,response," 查看详情

springboot核心-自定义starter(代码片段)

文章目录1.自定义starter1.1.IDEA中创建maven项目1.2.配置依赖1.3.属性配置类1.4.判断依据类1.4.自动配置类1.5.注册配置2.使用自定义的starter2.1.创建好SpringBoot项目2.2.引入我们自定义的starter3.查看引入的具体依赖4.工具类中使用5.启动测... 查看详情

2.自定义@excel注解实现数据excel形式导入导出(代码片段)

前言  这几天在学习如何使用自定义注解实现Excel格式数据导入导出,参考的还是若依框架里面的代码,由于是初学,所以照猫画虎呗,但是难受的是需要复制并根据自己项目修改作者自定义的工具类以及导入这些工具类的依... 查看详情

java常用工具类——文件读取的操作类(代码片段)

定义常用的文件类型publicclassFileType/***文件头类型*/publicstaticfinalStringXML_FILE="text/xml;charset=UTF-8";publicstaticfinalStringPDF_FILE="application/pdf";publicstaticfinalStringPDG_FILE="application/x-png";p 查看详情

《springsecurity框架专题》-07自定义加密(代码片段)

文章目录1.MD5加密工具类2.自定义加密器3.修改security配置文件虽然springsecurity已经提供了比较完善的加密机制,但是有时根据业务需求需要定制自己的加密方式。springsecurity提供了加密扩充的接口,下文主要介绍如何在springsecurity... 查看详情

自定义session,cookie(代码片段)

第一种情况:没有设置缓存:执行相对应的setitem等方法进行,保存到字典里面cookies_dic=print(cookies_dic)classSession():def__init__(self,handler):self.user_id=Noneself.handler=handler###这个handler是传过来的requetys对象,注明一下,这个handler是request对 查看详情

springboot自定义starter-《springboot编程思想》(代码片段)

很多时候,我们希望将一些功能封装到一个工具类里面保证代码的可重用,这时候就会写很多很多的工具类,我们不妨把这写生成一个依赖,需要使用的时候直接引入不香吗?因此《Springboot编程思想》实现了... 查看详情

自定义日志注解+aop实现记录操作日志(代码片段)

...操作,但这样对业务代码入侵性太大,下面就结合AOP和自定义日志注解实现更方便的日志记录 首先看下一个简单的操作日志表 action_logidsubject(日志主题)content(日志内容)create_bycreate_time 日志主题可以用下面的枚... 查看详情