cookie+token方式实现,
登录实现流程:点击登录,先验证用户名是否存在,然后再验证密码是否一致,再加个是否是黑名单的验证,如果都通过则执行登录逻辑,我们用userId通过md5加密的方法生成token,然后把userId和token存到redis中,并新建一个cookie(浏览器中的cookie是一个键值对的数组)加到浏览器域名下
鉴权实现流程:首先我们定义了一个requestFilter(实现了Filter接口),优先级定为了最高,所有请求都会通过这个requsetFilter,在doFilter方法中,我们通过request去获取到cookie,如果没有表示没有登录或者登录失败,其中我们还定义了一个sessionHelper类(定义了一个静态变量threadLocalHolder,类型为ThreadLocal(ConcurrentHashMap<String, Object>),我们会将userId为null保存到这个threadLocalHolder中,并且直接返回;如果有我们就从cookie中的token去取到redis中对应的userId,并将userId和它对应的值保存到threadLocalHolder中,不管有没有我们都要去remove这个threadLocalHolder,不然会有OOM的问题。
最终当我们去调用接口时,会先去判断threadLocalHolder有没有userId,如果没有就返回null,如果有就先去查redis中有没有对应userId的值,如果没有就去查数据库,查到了之后,将userId和userEntity保存到redis中,并且返回userEntity。