文档章节

登录的演进

xpbob
 xpbob
发布于 2018/12/25 00:40
字数 761
阅读 31
收藏 0

随着技术的迭代和变更,登录模块的也有了很多的变化,今天就主要来说说这个问题。

javaweb

javaweb时代是学校教学的一部分,他是使用了servlet来进行编程,有的教学会使用一些框架,例如springmvc。里面的登录案例都是使用session来做的。第一次登录做检验,如果成功,就把登录信息放在session里。而且session有超时时间控制,可以在对长期不访问的会剔除数据。session可以说是完美支持登录。
session是按照浏览器来作为唯一标识的,每次浏览器访问都会带着jssesionid,以此作为找到具体session的标志。

分布式

在单机不满足的时候,分布式出场了,开始有负载均衡的事情了,由于多个jvm一起协作了,session还是保持在单个jvm的,这个就没法用了,于是有了redis这种分布式缓存,也有ttl来控制时间。与浏览器交互的也就变成了token。没办法使用jsessionid了。于是服务端需要生成token,每次访问都带着这个token。

前后台分离

大型的项目前后台分离完全可以使用分布式的做法,但是也有小型的项目,尤其是使用springboot的时候,大家经常会遇到一个问题,就是使用session生成的id特别慢,会出现如下的日志。

Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [140,108] milliseconds.

网上可以查到解决方案。这里不做讨论。这是一个session的问题,那是否可以不用session呢,例如分布式的那种方案,不过为此加一个redis组建是很麻烦的事情,不如自己写一个简单满足需求的情况。 主要满足2个需求,一个是可以根据key找到value,第二个是要时间的过期限制。

public class LocalCache implements Runnable {


    private static ScheduledExecutorService swapExpiredPool
            = new ScheduledThreadPoolExecutor(1);
    {
        swapExpiredPool.scheduleWithFixedDelay(new LocalCache(), 5, 5, TimeUnit.MINUTES);
    }

    public static final long TIME = 30 * 60 * 1000;

    private static class DataInfo {
        public String value;
        public long currentTime;

        public DataInfo(String value, long currentTime) {
            this.value = value;
            this.currentTime = currentTime;
        }
    }

    public static ConcurrentHashMap<String, DataInfo> hashMap = new ConcurrentHashMap<>();

    public static void put(String key, String value) {
        hashMap.put(key, new DataInfo(value, System.currentTimeMillis()));
    }

    public static String get(String key) {
        DataInfo dataInfo = hashMap.get(key);
        dataInfo.currentTime = System.currentTimeMillis();
        return dataInfo.value;
    }

    @Override
    public void run() {
        long currentTime = System.currentTimeMillis();
        Set<Map.Entry<String, DataInfo>> entries = hashMap.entrySet();
        Iterator<Map.Entry<String, DataInfo>> iterator = entries.iterator();
        while (iterator.hasNext()) {
            Map.Entry<String, DataInfo> next = iterator.next();
            long time = next.getValue().currentTime;
            if (currentTime - time > TIME) {
                iterator.remove();
            }
        }
    }
}

我们用ConcurrentHashMap来做数据的保存,并且启动定时任务,每5分钟进行一次过期清理。只要找一个唯一id生成器就好。做为我们的key。每次只要把依旧传递token即可。

© 著作权归作者所有

xpbob

xpbob

粉丝 98
博文 98
码字总数 80029
作品 0
高级程序员
私信 提问
码云携手阿里云 CodePipeline,打造云上代码交付链

阿里云 CodePipeline 已增加对 码云 Gitee 代码库接入的支持,用户托管在码云上的代码可通过阿里云 CodePipeline 在云端实现从代码到应用的持续集成和交付,方便您快速的对您的产品进行功能迭...

码云Gitee
2018/06/05
0
0
9-8 更新 - 2017 Citrix partner webinar PPT及在线观看地址

PPT下载地址: http://pan.baidu.com/s/1ckHymM 2017-09-08 Citrix Cloud transformation http://v.youku.com/vshow/id_XMzAxMjg0ODkwMA==.html 2017年8月 - HDX 3DPro深度讲解 http://v.you......

sesame.qian
2017/05/02
0
0
阿里云 CodePipeline 对接码云,打造云上代码交付链

阿里云 CodePipeline 已增加对 码云 Gitee 代码库接入的支持,用户托管在码云上的代码可通过阿里云 CodePipeline 在云端实现从代码到应用的持续集成和交付,方便您快速的对您的产品进行功能迭...

码云Gitee
2018/06/04
2.8K
19
[开源]基于Log4Net简单实现KafkaAppender

背景 基于之前基于Log4Net本地日志服务简单实现 实现本地日志服务,但是随着项目开发演进,本地日志服务满足不了需求,譬如在预发布环境或者生产环境,不可能让开发人员登录查看本地日志文件...

MeetYan
04/12
0
0
在阿里“救了八年火”的程序猿,这样讲述大型项目架构演进过程

  高大上的淘宝架构   上面是一些安全体系系统,如数据安全体系、应用安全体系、前端安全体系等。   中间是业务运营服务系统,如会员服务、商品服务、店铺服务、交易服务等。   还有...

CSDN
2018/01/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Taro ScrollView 组件的 scrollTop 属性是个坑

官方issue:ScrollView设置scrollTop没效果 同样的,设置 scrollTop=0 并不能实现置顶,官方回复早就修复了,我的 Taro 版本已经是最新的,然而并未修复。 万能的评论区,给出了失效的原因。...

dkvirus
25分钟前
1
0
Qt那些事0.0.21

这次还是关于PRO文件中QMAKE_POST_LINK的故事。 平时都是使用VS2015作为编译器,恰巧想用MinGW编一版程序,结果偏偏出现了错误。话说测试的这个项目可是在Linux下(fodera 20)可以正确编译通...

Ev4n
35分钟前
0
0
OSChina 周六乱弹 —— 抖音外放 亲妈下葬。

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @巴拉迪维 :一直没想明白黎明是怎么混进「四大天王」的,直到最近网易云音乐心动模式开启之后 #今日歌曲推荐# 《那有一天不想你》- 黎明 手机...

小小编辑
今天
340
8
Linux使用源码包安装软件

前言: 最近整理一些以前的学习笔记。 过去都是存储在本地,此次传到网络留待备用。 源码包 Linux软件多数免费、开源,是开发人员编写的,具有很强可读性的一组相关代码文本。 源码包 --> 编...

迷失De挣扎
今天
6
0
IPv4如何转换为IPv6?

ipv6已经逐渐在应用,现在已经有很多的运营商支持ipv6,前天我们也发布了如何让电脑使用ipv6地址?有很多朋友在问?ipv6有什么作用,它的表示方式是什么,今天我们来一起来详细了解下ipv6相关计...

xiangyunyan
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部