赛门铁克CA不被信任后,我们用什么
今天(2017/8/1),cnbeta上报道Chrome计划在2018年取消对赛门铁克CA的信任。我的网站之前的ca证书是从阿里云和腾讯云申请的免费证书,都是从赛门铁克签发的。神仙打架,凡人遭殃。有了这档子事,我就开始着手更换一个可靠的证书。经过再三筛选,最终决定使用Let’s encrypt提供的证书(免费)。原因是这家机构是大学背景,而且谷歌参与出资。下面是具体的操作过程。 安装 ACME client按照官方推荐,采用Certbot作为ACME客户端。 访问Certbot网站,选择Http服务器和操作系统,会自动提示对应的Certbot客户端。我的服务器是Nginx+Centos 6,根据提示做以下操作 wget https://dl.eff.org/certbot-autochmod a+x certbot-auto 获取证书 第一次签发证书的命令很慢很慢,需要安装许多依赖包和python组件。如果长久没反应,杀掉重来。多试几次。 sudo ./certbot-auto --nginx certonly # 建议带上certonly参数,否则...
Spring Boot添加静态资源目录
Hexo的好处很多,坏处之一就是图片的处理了。虽然可以在_post下创建静态资源目录,但我是把这个目录当作笔记目录,多了一些文件夹强迫症真的受不了。而第三方图床服务,总不能放心。刚好我的服务器上同时还有个jar在跑,目的是提供我的api,那么就通过这个去实现我自己的图床吧。 实现方式这个api.jar采用的是Spring Boot架构,虽然可以通过字节流去定义一个RESTful API提供图片服务,但觉得是高射炮打蚊子。还是直接增加一个外部资源目录,通过访问静态资源的方式去提供图片。本地通过ftp上传图片在这个目录。后续有必要的话,还可以建一个Git仓库,通过hooks转发到这个目录里去。 具体步骤增加一个配置类,继承WebMvcConfigurerAdapter类,并重写addResourceHandlers方法。 package com.lefer.bed;import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.ann...
Spring AOP实现零侵入日志记录
软件系统的日志输出是必不可少的,目前在做的RESTful系统中,需要考虑比较复杂的日志处理,但又不想让开发人员在写每个API的时候都去考虑日志的处理,干扰正常的开发,于是决定采用AOP实现零侵入的日志处理。以下是核心思路。 引入AOP依赖在项目的pom.xml中引入AOP依赖,对于Spring Boot来说应如下。 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> 编写Aspect类package com.lefer.demo4doc.aspect;import com.fasterxml.jackson.databind.ObjectMapper;import com.lefer.demo4doc.common.Result;import io.swagger.anno...
Linux 常用命令记录
发现每次需要在Centos里干什么事的时候,都要搜索一把对应的命令是啥,一次又一次( ̄﹏ ̄;)。这次下决心把我用到的命令慢慢全记录下来。免得查来查去浪费时间。 查看端口被谁占用,然后干掉它。 lsof -i:4000 # 查看4000端口是由哪个进程占用,获取进程号PIDps -ef|grep 43254 # 查找进程号对应的程序kill -9 43254 # 干掉它 查看所有端口 netstat -ntlp 压缩 tar –czvf xxx.tar.gz xxxtar -xzvf xxx.tar.gz firewall # 列出规则sudo firewall-cmd --list-port# 添加规则sudo firewall-cmd --zone=public --add-port=6022/tcp --permanent# 移除规则sudo firewall-cmd --zone=public --remove-port=6022/tcp --permanent# 向指定网段开放指定端口sudo firewall-cmd --permanent --...
跨浏览器调用总结
在行业软件的环境中,客户方通常拥有很多套B/S软件系统,可能各自对浏览器有着特殊的要求,比如必须用chrome访问,必须用IE访问等。当去做一个集成类的B/S系统时,就出现了需要唤起特定的浏览器去打开特定的url的场景,笔者根据自己的经验对可以采取的方案进行了总结。 方案一、使用插件及引擎 IE->Chrome 通过安装google-chrome-frame框架,然后使用gcf://协议去指定IE调用google-chrome-frame去渲染。但需要注意的是,谷歌浏览器内嵌框架从2014年2月25日起已经停止维护更新。 Chrome->IE 通过安装Chrome扩展组件,如IETab,Open IE等,然后在js中调用。由于行软环境通常无法访问外网,而且谷歌应用商店在墙外,所以开发者需要直接提供.extension文件供客户安装。有一定的实施难度。 方案二、通过ActiveX控件 IE->Chrome 通过js的ActiveXObject对象来调用Chrome。需要注意的是这种方法需要修改浏览器的安全...
设计模式演绎-单例模式
定义 Ensure a class has only one instance, and provide a global point of access to it. 确保某一个类只有一个实例,而且自行实例化并向整个系统提供整个实例。 通用类图 单例模式类的构造方法是一个私有构造方法 单例模式类的属性包含自身,并限制为private static final类型,默认调用自身的构造函数 单例模式类提供static的getSingleton()方法供外部引用 通用代码public class Singleton(){ private static final Singleton singleton = new Singleton(); //私有静态属性 private Singleton(){} //私有构造方法 public static Singleton getSingleton(){} //引用者必须通过该方法获得实例对象 public static void doSomething(){...
读《简约之美 软件设计之道》
书籍信息 中文书名: 简约之美:软件设计之道英文书名: Code Simplicity: The Science of Software Design作者: [美]Max Kanat-Alexander译者: 余晟 阅读感悟 软件是必然要变化的,变化是常态;有变化就需要维护,随着时间的推移,维护成本会远远超过初期开发的成本,占据成本的大头;因此,在软件开发中,最重要的是要降低维护成本;维护成本正比于系统的复杂程度,所以要降低维护成本,系统的设计就应当追求简单清晰。维护成本应包含实施成本 好程序员与差程序员的区别在于理解能力,差程序员不理解自己做的事情,优秀的程序员则相反。信不信由你,道理就是这么简单。 在设计决策中,实现成本通常并不是重要的因素,所以基本可以忽略。相比降低实现成本,降低维护成本更重要。 软件设计的三大误区 编写不必要的代码。总以为将来会用到,实际上只会带来困惑与BUG。 代码难以修改。首要追求简洁,不能简洁则保证一致。 过分追求通用。通用则带来复杂。 避免重复。理想情况下,任何系统里的任何信息,应当只存在一次。 需要避免的八件事 扩展软件的用途。软件...
开启GZIP为网站加速
首先推荐百度统计-优化分析-网站速度诊断,这个用来分析站点的速度问题还蛮好的。chrome浏览器的插件yslow也是一个很好的诊断工具。启用新站点后,始终感觉速度不如意,于是在百度上一诊断,得分86分,建议我启用gzip。于是开始折腾,配置gzip,我使用的http服务器是nginx。具体步骤如下。 开启Gzip开启全局如果想开启全局可以在nginx.conf上配置。配置方式与在二级站点上的配置是一样的。我本人此次只想在二级站点上开启。所以这里就不操作了。 /etc/nginx/nginx.conf 开启二级站点cd /etc/nginx/conf.d # 转到站点的配置文件目录vim blog.conf # 修改对应的站点配置文件 在server{}里配置以下项目 gzip on; // 开启 gzipgzip_disable "msie6"; //禁用 ie6 的 gzip 选项,由于 ie6 的性能差,启用 gzip 容易导致页面假死gzip_vary on; //http 头部,意在对于不支持 gzip 压缩的浏览器不进行压缩.gzip...
Spring Boot RESTful 在线API文档
使用Spring Boot 去开发一个RESTful API是一件简单的事情,而且Spring Boot结合Swagger后,使用注解就能简单的实现在线API文档,这样能实现修改代码和修改文档二合一,降低开发人员造成文档和接口的不一致的几率。以下为具体实现。 引入swagger的相关依赖<dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.2.2</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId>...
网站迁移结束
花了2天事件,搭建了hexo静态网站,然后把原本在wordpress里写的文章有选择的迁移到了hexo,po完这一篇就正式关闭我的wordpress服务,将www入口指向hexo。 原本使用wordpress的框架去写博客,需要打开网站后台去编辑文章,是一件很刻意的事。而我其实平时喜欢在个人电脑上用typora记录一些事情。为了将一些内容post到网上,还需要刻意去粘一遍到wordpress里去,这很不酷。wordpress也提供了桌面程序,但写完的东西直接就post上去了,我本地又没有留存。而且在服务端存在mysql里,我如果想查看,必须打开网站,如果哪一天我的服务器被黑了,是一件很麻烦的事。所以一直希望有一个解决的办法,直接写完就能提交到网站里,而且是文本样式保存的,而且是Markdown的。刚好就是hexo。 这次翻翻拣拣,不知不觉自己也写了这么多东西,虽然大部分都是学习笔记。但也成就满满。 继续加油吧!
