简单的看一下cookie的用法同时谈谈代码规范

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单的看一下cookie的用法同时谈谈代码规范相关的知识,希望对你有一定的参考价值。

业务需求:用户登录需要输入验证码

单机版可以采用session存储,在集群环境下不行,

ok ,验证码生成后加密同时生成cookie ,推送至客户端。用户登录提交,后台通过request取出cookies与输入值做检验

public class CookieUtil {
    
     private final static String LOGIN_COOKIE           = "test";
     private final static String LOGIN_PATH          = "/";
     
     private static Logger log = LoggerFactory.getLogger(CookieUtil .class);
     
     public static void addLoginCode(HttpServletRequest request,
                      HttpServletResponse response, String code) {

         if (StringUtil.isBlank(code)) {
            return;
         }
       
         code = Md5Util.getMd5(code.toLowerCase()).toLowerCase();
         
         Cookie cookie = new Cookie(LOGIN_COOKIE, code);
         cookie.setPath(LOGIN_PATH);
         cookie.setMaxAge(-1);
       
         response.addCookie(cookie);
         
         log.debug("create login code to cookie success, the cookie of value is:{}", cookie.getValue());
     }
     
     public static Boolean validate(HttpServletRequest request,
            HttpServletResponse response, String code){
         
         if (StringUtil.isBlank(code)) {
             return Boolean.FALSE;
         }
         
         Cookie[] cookies = request.getCookies();
         if (null == cookies || cookies.length < 1) {
             log.debug("no cookies exist");
             return Boolean.FALSE;
         }
         
         code = Md5Util.getMd5(code.toLowerCase()).toLowerCase();
         
         for (Cookie thisCookie : cookies) {
             if (LOGIN_COOKIE.equals(thisCookie.getName()) && code.equals(thisCookie.getValue())) {
                  log.debug("login code validate success, the value of cookie is:{}", thisCookie.getValue());
                     return Boolean.TRUE;
             }
         }
        log.debug("login code validate failed");
        
        return Boolean.FALSE;
     }
     
    
}

 技术我就不多说了,如还有疑问可以参看其他博客

下面我想说一下代码规范:

 

在说代码规范之前,我稍微解释下,上面的代码是我经过了两轮的优化。

举个例子:

if (StringUtil.isBlank(code)) {
    return;
}
code = Md5Util.getMd5(code.toLowerCase()).toLowerCase();

修改之前是:

if (StringUtil.isNotBlank(code)) {
   code = Md5Util.getMd5(code.toLowerCase()).toLowerCase();
}else{
   return; 
}

 ok,逻辑没有问题,不过,代码不够精简

当然还有其他问题,

比如 判断 cookie为空,从代码美观角度上考虑 应该是  cookie == null 而不是  null == cookie

比如 常量与对象的属性比较是否相等,常量尽量前置、

and so on...

 

总结

1.代码精简,易读;

2.嵌套不宜过深;

3.字符串比较 常量尽量放在equal之前;

4.一个方法快中的代码要有 块的概念。块与块之间用空行来分割;

5.日志的规范,尽量使用英文,避免线上有时产生的中文乱码

以上是关于简单的看一下cookie的用法同时谈谈代码规范的主要内容,如果未能解决你的问题,请参考以下文章

谈谈 git 撤销操作

iOS cookie的用法

代码规范的重要性

全栈之路-杂篇-探究springBoot中的条件注解

初步的看一下C#窗体程序的直接反汇编代码

Hive 简单函数用法集结