为什么你需要两部手机,而不是双卡双待?
2020-11-07当代社会,手机之于个人变得越来越重要,从吃饭到购物、从娱乐到消费、从收钱到花钱,无不依赖于手中这个巴掌大小的东西。我们可以毫不夸张地说,手机已经俨然成了人类的一个“器官”,缺胳膊少腿没关系,可要是离开了手机,不行!也正因如此,手机承载了我们个人太多的个人信息,一旦丢失,后果不堪设想。
作为一名双机党,经常有朋友好奇地问道,“你拿两个手机不嫌麻烦么,直接搞个双卡双待不好吗?莫非一个手机是用来。。嘿嘿嘿。。”有时候想来也是,两个手机确实时有不便,而且偶尔遇到思路清奇、仙风道骨的朋友,不免容易想入非非。
阅读全文 »Jasypt自定义密码加解密算法
2020-09-19Jasypt是什么就不用我科普了吧?Jasypt常和Spring Boot/Spring Cloud搭配,用来对应用配置文件中的密码、密钥等敏感信息进行加密存储。
言归正传,我们最近基于Spring Boot开发了一个Web应用,不过因为合规要求,某些配置信息需要使用加密机进行硬件加解密。但是Jasypt默认只支持对称加密和非对称加密两种算法,如果使用其他加解密方式,需要自己进行扩展实现。可是我在网上溜了小半天,发现网上的教程都是教你怎么把Jasypt和Spring Boot框架进行整合的,我的需求并没能找到相应的解决方案。所以我只能自己读Jasypt的源码分析了。
阅读全文 »Flyme系统下IFTTT不能转发通知短信的解决办法
2018-03-18在上一篇文章中,我们介绍了Android系统下使用IFTTT+Telegram转发未接电话和未读短信的方法。在测试上述方法的过程中,我在使用短信转发的时候遇到了一个奇怪的问题——对于个人发送的短信,IFTTT可以正常转发;但是对于短信平台发送的短信(比如登陆验证码、支付验证码等等),则不会进行转发。
我经过分析发现,这个问题是和Flyme系统底层的短信处理机制有关的。Flyme系统默认将短信分成了两种——个人短信和通知短信。对于个人短信,IFTTT可以通过Android系统底层提供的短信接口进行读取;但是对于通知短信,大概是Flyme系统更换了存储位置的缘故吧,IFTTT就不能通过接口读取了,相应的,消息转发提醒也就无从谈起了。
为了解决这个问题,我想到了一个变通的方法——通常每条未读短信都会产生一个系统通知,所以我们可以通过ifttt监听Android的通知消息,并过滤出由短信App产生的消息,然后通过Telegram/邮件转发给其他手机即可。 阅读全文 »
使用IFTTT+Telegram转发未接电话和未读短信通知
2018-03-18作为一个数码控,我手里边常用的手机主要有两个,一个iPhone系列,主要用机;一个魅蓝系列,备机,主要用于接收各种验证码。平时出门的时候,我一般两个全带上,一来可以防止主机没电时“失联”;二来当主机使用的运营商网络没信号时,可以用备机建个热点保证网络的可用性。但好多时候吧,比如上个厕所,只带一个手机就出来了。如果这个时候需要用备机接收个验证码(登陆验证、支付验证,等等),或者恰好有人给你的备机打电话,这时候就不能及时收到短信/电话了。
为了解决这个问题,我决定采用IFTTT+Telegram把备机的未接电话和未读短信转发到主机上。具体讲来,就是在备机上安装一个IFTTT软件,赋予其监听电话和短信的权限;在主机上安装一个Telegram软件,用于接收消息推送。当IFTTT监听到未接电话或新信息时,会向Telegram推送一条消息,这样就可以及时知道了。 阅读全文 »
分享56个Jenkins插件离线安装包
2018-01-09我最近在公司内网上折腾Jenkins。因为公司内网与互联网完全隔离的缘故,所以对于折腾像Jenkins这样严重依赖网络安装插件运行的软件来说,绝对是莫大的痛苦。更坑爹的是,一个Jenkins插件背后,可能还会依赖于数个插件,而被依赖的插件背后,可能还会依赖着好几个,层层深入。而且在安装插件的时候,如果该插件依赖的插件哪怕有一个没被安装,都会导致该插件安装失败。我这里一共准备了56个插件,可想而知,安装过程有多么痛苦。。
为了完成预定功能,我先把需要的几个核心插件下了下来,然后把它们依赖的插件一个个扒下来,再通过在外网机器上断网模拟内网环境、把插件一个个安装上去获得安装顺序,最后把排好序的插件扔到内网服务器上。
为了避免各位网友再重复我的痛苦历程,也为了方便一些刚开始学习Jenkins、不知道应该安装什么插件的朋友,我在此将我安装的56个插件以及它们使用的Jenkins程序(v2.60.3)分享给大家。我选择的这56个插件,基本上涵盖了需要使用Jenkins的大部分需求,从Git、SVN拉取代码,到调用代码分析工具,再部署到Tomcat、WebSphere服务器,应有尽有,希望能够给大家帮得上忙。 阅读全文 »
Tomcat中Session对象部分属性值丢失问题的分析与解决
2017-11-05我们最近的一个Java项目在从开发环境迁移到测试环境之后,遇到了一个非常诡异的问题——在将一个Java对象存储到SESSION会话中而后从中取出时,这个对象的部分属性在SESSION会话刚创建的一段时间内是正确的,但是一段时间过后,虽然SESSION没有失效,但是这部分属性的值却变成NULL了。更令人奇怪的是,无论是变成NULL的属性,还是未变成NULL的属性,都是最简单的String类型变量,实在让人看不明白他们之间到底有何不同。
为了将问题表述清楚,下面我举个例子来详细说明下。我们定义的类信息大概如下图所示:
其中,SessionBean是我们将要放到SESSION中的对象,而BaseBean则是SessionBean继承的父类。无论是在开发还是测试环境,SessionBean对象都可以不抛出任何异常地存取值,但是其中的属性则不一定:属性a和属性b在SESSION创建之后,只要SESSION没有失效,就一直可以正常读取其值;但是其中的属性c,只在SESSION创建不久的一段时间内有效,如果一段时间后再取值,属性c的值就变成NULL了。没有任何认为操作,变量值却改变了,是不是很神奇? 阅读全文 »
Nginx按天切分日志并自动备份到七牛云存储
2017-10-18在上篇文章中我曾讲到,数天前我将本站从阿里云的虚拟主机迁移到了ECS云主机上。在迁移过程中,我在安装Nginx服务器的时候遇到了一个非常典型的问题——如何将Nginx服务器的日志按日期进行切分?Nginx服务器的日志默认是存放在access_log.log和error.log两个文件中的。如果不对这两个文件进行切分处理,长此以往,这两个文件将变得非常巨大,以致影响数据的存储和分析,难以使用。所以,对这两个文件进行切分,尤其是按时间进行切分,还是非常有必要的。
其次,我国相关法律规定,“互联网信息服务提供者、互联网接入服务提供者应当记录日志信息,保存12个月”。出于网站的合规性考虑,我们需要将网站服务日志做较长时间的保留。可是ECS的自带磁盘无论是出于存储代价还是服务可靠性的考虑,都不适合这种持久性保存的应用场景,最好的处理方式还是将这些日志存放到专业的云存储服务中。鉴于七牛提供了10GB的免费存储空间和较为完善的命令行工具,而阿里云的OSS云存储多多少少仍需要付些费用,所以我最终还是决定采用七牛家的服务来做这件事情。那么,怎样才能将Nginx的日志增量备份到七牛云存储呢?
网络上关于Nginx日志按时间切分的文章很多,Google一搜一大把;而且,七牛也为Linux操作系统提供了现成的QSHELL上传工具。所以,只要对网络上的现有脚本稍加改造,便可以实现我们需要的功能。下面我简单介绍一下我是如何实现这两个功能的。 阅读全文 »
SoftEther VPN进阶:静态路由表推送(拆分隧道)
2015-01-15前段时间我曾介绍过SoftEther VPN在Linux系统下的安装和配置,今天咱们再进一步,介绍一个SoftEther VPN的高级功能——静态路由表推送(拆分隧道)。
以Windows操作系统为例,默认情况下建立VPN连接后所有网络流量都是经由VPN隧道进行传输的。但是很多时候这是完全没必要的,甚至是低效的,其实只要一部分特定流量通过VPN隧道即可。在实际应用场景中,假如我是一名电信用户,我只需要对访问联通的流量进行加速,而电信流量,直接走电信的网络就可以了。为达到这个目的,我们通常是在建立VPN隧道后采用路由表来为不同的目的IP设定不同的路由信息。但是由于路由表配置起来比较麻烦,而且稍有不慎就会导致机器上不去网,而且这种路由表错误一般人根本查不出来,所以如果能在建立VPN隧道的同时配置好路由表,自然是最好不过的事情了。
在对SoftEther VPN这款神器进行一番把玩后,我发现SoftEther VPN还真有这样的功能——静态路由表推送(拆分隧道)。根据我的理解,静态路由表推送就是在建立VPN隧道的同时,服务器端将预先设定的路由条目一并推送给客户端,而后客户端再把它加入到本地的路由表中。这样一来,客户端(本地PC)只需将发往推送路由条目包含网段的数据包转发给VPN服务器,从而达到了智能传输的目的。 阅读全文 »
360安全路由器P1(公测版)试用报告
2014-11-28能够在公测期间拿到了360安全路由器P1,而且是陆战队专版,真的非常幸运,我在此我对360的工作人员表示感谢。我是前天下午收的货,经过了两天的测(zhe)试(teng)后,我把自己感觉不错的、以及有待改进的地方整理了下,也欢迎各位网友讨论。 阅读全文 »
使VSFTPD Ftp Server同时支持IPv4和IPv6网络
2014-10-10虽然VSFTPD Ftp Server本身支持IPv6网络,而且在配置文件(/etc/vsftpd/vsftpd.conf)中就有一个“#listen_ipv6=YES”选项,但是默认情况下IPv6服务是不生效的。在实际应用中,如果我们想让VSFTPD同时支持IPv4和IPv6,似乎只要把“#listen_ipv6=YES”取消注释、然后重启VSFTPD服务就OK了。不过我在实际操作中发现,如果只是简单地取消掉“listen_ipv6=YES”的注释,重启服务时会提示VSFTPD在IPv4和IPv6网络下同时运行产生冲突,错误信息如下:
500 OOPS: run two copies of vsftpd for IPv4 and IPv6
这可咋办,难道VSFTPD不能同时在IPv4和IPv6网络下运行吗?我经过查资料后发现,根本不是这样,VSFTPD可以同时运行在IPv4和IPv6网络下,不过需要使用两个配置文件,将“listen=YES”和“listen_ipv6=YES”分别放在两个配置文件中,一个负责监听IPv4,一个负责监听IPv6,这样就不会冲突了。
经过测试,IPv4和IPv6确实都可以正常连接。