-
JSON数据对比
做了一个JSON数据比较的页面,方便工作中的需要,暂时只支持纯文本比较。DEMO地址:[http://www.acgist.com/demo/json/index.html](http://www.acgist.com/demo/json/index.html)
JSON 比较 -
Eclipse插件pydev
最近重拾Python,安装pydev插件时,发现[http://www.pydev.org/updates](http://www.pydev.org/updates)这个地址没有效了。放到浏览器访问了一下,发现失效了,建议跳转新连接[https://dl.bintray.com/fabioz/pydev/5.9.2/](https://dl.bintray.com/fabioz/pydev/5.9.2/)就OK了。
Eclipse pydev 插件 -
HTTP基本认证
以前就挺好奇路由器认证时的弹窗是怎么做的。今天看了HTTP权威指南的HTTP基本认证基本上了解了。这里放一个JSP的示例,更多资料可以看HTTP权威指南的基本认证机制章节,或者参考后面的文章。```java<%@pageimport="org.apache.http.HttpStatus"%><%@pageimport="org.apache.http.HttpHeaders"%><%@pageimport="org.apache.commons.codec.binary.Base64"%><%@pageimport="org.jboss.netty.handler.codec.base64.Base64Decoder"%><%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><%booleanauth=false;Stringpswd=request.getHeader(HttpHeaders.AUTHORIZATION);if(psw...
HTTP 基本认证 -
Ehcache缓存延迟
最近用了一下Ehcache的同步,发现存在一些问题,有时候延迟比较严重。导致几台服务器之间的内容不一致。如果要解决这个问题,其实方法也很简单,就是不要使用异步线程去同步信息。只需要将`replicateAsynchronously`设置为`false`即可解决。
Ehcache 缓存 延迟 -
代码重构
代码重构真的要非常的小心,小心仔细,特别是对一些特殊情况的处理,还有对旧逻辑的兼容。愁啊愁白了头啊。
代码重构 -
Windows搭建Storm1.1.0环境
*首先安装JDK,我这里使用的是Java8,安装后配置`PATH`、`JAVA_HOME`。*然后安装zookeeper,我也是安装版本是:Release3.4.10(stable),地址:[https://zookeeper.apache.org/releases.html](https://zookeeper.apache.org/releases.html),解压后配置`PATH`、`ZOOKEEPER_HOME`。启动时还需要复制`conf/zoo_sample.cfg`并改名为`zoo.cfg`。然后就可以启动成功了。*然后现在安装Storm,最新版本:`1.1.0`,地址:[http://storm.apache.org/downloads.html](http://storm.apache.org/downloads.html),解压后配置`PATH`、`STORM_PATH`。配置完成,启动命令:```bashstormnimbusstormsupervisorstormui```启动后就可以访问`http://location:8080`一般情况下会出现几个问题,为了解决问题我们最好是把`c...
Storm -
@Cacheable键值碰撞问题
最近遇到一个非常奇怪的问题,就是一个使用了缓存的方法,获取到的一条数据出现了问题,之前并没有缓存过这组查询参数,但是并没有从数据库查询,而是直接从缓存中拿到了数据。但是这个方法从来没有改过,以前也没出现过问题。方法使用的是`@Cacheable`注解的,开始我以为是并发过高导致,但是看了日志发现并不是。于是我把一个小时内(缓存的有效时间)的调用这个方法的参数全部来执行了一遍这个方法,发现缓存的数据大小少了一个。于是我找了一下缓存的默认生成策略是`HashCodeCacheKeyGenerator`。于是用这个生成策略使用参数生成了`key`发现出现了重复的。问题就是它了。```javapublicstaticvoidmain(String[]args)throwsException{//ListCacheKeyGeneratorg=newListCacheKeyGenerator();//StringCacheKeyGeneratorg=newStringCacheKeyGenerator();HashCodeCacheKeyGeneratorg=newHashCodeCacheKeyGenerator();...
@Cacheable Ehcache -
HTTPClient重定向
使用的HTTPClient版本4.5.2,默认使用的重定向策略是`DefaultRedirectStrategy`。如果是使用的`POST`,然后`301`重定向是不会执行重定向后的请求的,而是直接获取到`301`状态码。主要的代码:```javapublicbooleanisRedirected(finalHttpRequestrequest,finalHttpResponseresponse,finalHttpContextcontext)throwsProtocolException{Args.notNull(request,"HTTPrequest");Args.notNull(response,"HTTPresponse");finalintstatusCode=response.getStatusLine().getStatusCode();finalStringmethod=request.getRequestLine().getMethod();finalHeaderlocationHeader=response.getFirstHeader("location");switch(status...
HTTPClient 重定向 -
vsftpd搭建ftp服务器
今天使用vsftpd搭建ftp服务器发现在内网测试机没问题,但是外网测试的时候却不能访问。使用Windows的ftp访问的时候直接提示`500OOPS`,然后就没有了其他错误了。最后使用Linuxftplocalhost时提示:```500OOPS:cannotchangedirectory:/home/ftpLoginfailed.```网上都说是SELinux的问题,但是发现状态为`disable`。仔细看了后面参考文章,发现我的`home`的目录的权限是`700`,然后修改为`755`然后问题就解决了。>参考文章:[https://www.server110.com/vsftpd/201402/6312.html](https://www.server110.com/vsftpd/201402/6312.html)vsftpd搭建教程:[http://www.cnblogs.com/kluan/p/4821537.html](http://www.cnblogs.com/kluan/p/4821537.html)添加新用户步骤:*添加Linux用户:```bashuseradd-d/home/ft...
Linux vsftpd ftp sftp -
Java和C#使用DES加密结果不一致
C#和Java使用DES加密有一些区别,主要就是加密模式。Java默认使用的是ECB,C#默认使用的是CBC。例如如下Java代码:```javaSecureRandomrandom=newSecureRandom();DESKeySpecdesKey=newDESKeySpec(password.getBytes());SecretKeyFactorykeyFactory=SecretKeyFactory.getInstance("DES");SecretKeysecurekey=keyFactory.generateSecret(desKey);Ciphercipher=Cipher.getInstance("DES");cipher.init(Cipher.ENCRYPT_MODE,securekey,random);returncipher.doFinal(data);```那么使用C#时需要这样设置:```c#DESCryptoServiceProviderdes=newDESCryptoServiceProvider();byte[]inputByteArray=Encoding.UTF8.Get...
Java C# DES -
加密算法学习总结
经常会使用一些加密算法,也不会太细节的讲解,主要终结一下。常用的MD5、SHA-1这些其实是一种散列算法,也叫HASH算法或者信息摘要算法。主要用来保证数据的完整性,也就是没有被修改,有时也经常用来给用户信息加密,主要是不可逆。数字签名是保证不可抵赖性和完整性,一般都是对信息摘要进行签名,而不是原始数据,这样性能比较高。常用的加密算法DES、RSA、AES等,加密算法分为对称加密和非对称加密,主要的却别就是公钥和私钥是否一样。数字证书:包含公钥等等信息,通过CA公钥验证证书签名判断是否有效数字证书。密钥:包含私钥公钥PKI/CA/RA/OCSP等等还有一个需要了解的分组密码,有ECB,CBC,CFB和OFB这几种算法模式。>参考文章和工具:[http://tool.chacuo.net/cryptrsapubkey](http://tool.chacuo.net/cryptrsapubkey)[http://www.iplaysoft.com/encrypt-arithmetic.html](http://www.iplaysoft.com/encrypt-arithmetic.html)[http:/...
加密算法 RSA DES MD5 -
阿里云负载均衡重定向时被加上端口
服务器使用的Nginx,然后使用了阿里云的负载均衡后,发现重定向时却加上了Nginx的端口。浏览器访问:`https://www.acgist.com/music/index`正确的情况是重定向到:`https://www.acgist.com/music`然而却重定向到了:`http://www.acgist.com:8888/music`(Nginx对阿里云开放的端口:8888)原因很简单就是重定向时拿`host`错了,原来Nginx配置少了`host`这一行:```proxy_set_headerHost$host;```加上后完美解决。
阿里云 重定向 Nginx 负载均衡 -
下载文件时如何同时返回参数
要在下载文件时同时传递参数给客户端,我之前想了两种方法:1.使用输出流先输出返回的参数,然后换行返回文件流。2.使用`header`返回参数。这里我使用第二种。Servlet代码:```javapackagecom.acgist.servlet;importjava.io.File;importjava.io.FileInputStream;importjava.io.IOException;importjava.util.HashMap;importjava.util.Map;importjavax.servlet.ServletException;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importorg.apache.tomcat.util.http.fileupload.IOUtils;@WebServlet(...
Java 下载 -
Linux修改SSH端口
昨天我把`SSH`的端口修改了,发现今天一个攻击的也没有了。Linux的`SSH`登陆端口是`22`,如果你不修改,每天都会收到非常多的攻击,其实很多攻击估计都是用的脚本,所以修改一下端口基本上就没有受到攻击了,当然除了有人故意攻击你。修改教程:1.修改`/etc/ssh/sshd_config`的`Port`为其他端口2.重启`ssh`:`servicesshdrestart`**当然比较重要的就是要记住防火墙设置,还有一个非常重要的就是一定要先测试一下能连接在关闭当前的`shell`窗口,否者哭都来不及**。
Linux SSH -
Linux安全增强
记一下这两天搞的一些琐事。*防火墙屏蔽了`3306`端口*修改ssh的端口号,修改文件`/etc/ssh/sshd_config`的`Port`字段*修改了`Tomcat`的`JSESSIONID`的名称,其实我之前也好奇为什么我没有使用`JSP`后缀,百度云观测知道我使用的开发语言是`Java`,最后我才发现`cookie`里面的`name`为`JSESSIONID`,于是乎改了一下,第二天发现开发语言变成了未知:修改`JSESSIONID`的地址就是`tomcat/conf/service.xml`中`Context`节点`sessionCookieName`属性*使用`trimDirectiveWhitespaces`对`JS`中标签解析后的空行处理
Linux 安全 -
Nginx错误
首先我们来解决`last`和`break`的区别:```roothtml;indexindex.html;location/c/{rewrite.*/;}location/a/{rewrite.*/c/last;}location/b/{rewrite.*/c/break;}```访问`localhost/a/`时访问的是`html/index.html`访问`localhost/b/`时访问的是`html/c/index.html`好了,然后我们修改配置:```location/a/{rewrite.*/a/last;}```这种情况访问时,系统提示`500`错误,错误日志:```rewriteorinternalredirectioncyclewhileprocessing"/a/",client:127.0.0.1,server:localhost,request:"GET/a/HTTP/1.1",host:"localhost"```那么下面这个情况呢:```location/b/{rewrite.*/b/break;}```这个情况就比较复杂了第一种情况:路径`html/b/`不存在时,提示`404...
Nginx last break -
错误日志
错误日志输出时,尽量输出能够准确标记定位错误的信息,比如ID,错误内容,引发错误的类的属性值。因为本地测试时,只有你一个人产生的日志,日志量少容易排查。但是生产环境你可能就很难追踪到错误信息,因为错误看起来都是一样。
错误日志 -
JSONObjectProxy
`JSONObject`这个类使用`getString`方法时,如果没有`key`时,会提示`net.sf.json.JSONException:JSONObject["key"]notfound.`错误。所以这里写了一个代理程序,判断是否为空,代码如下:```javapackagecom.demo.json;importjava.math.BigDecimal;importnet.sf.json.JSONNull;importnet.sf.json.JSONObject;/***代理JSONObject对象*不能继承JSONObject,此对象为final*/publicclassJSONObjectProxy{privateJSONObjectjson;publicJSONObjectProxy(JSONObjectjson){if(json==null)thrownewIllegalArgumentException("参数错误");this.json=json;}publicStringgetString(Stringkey){if(json.containsKey(key)){Objectvalue...
JSONObjectProxy -
测试
最近感觉活的有点迷迷糊糊,也许是刚刚放完年假的关系。说到测试,我其实是一个非常不喜欢测试的人。也是最近经常出问题,所以这里也记录一下给自己一点警戒。修改代码前一定要先想清楚导致问题的原因,然后再修改。修改时要考虑到所有的因数,因为很多方法不止一个地方用到,其他的地方也会用到。修改后一定要测试,因为很多因素会导致出现问题。测试,不仅仅要测试成功,失败也很重要。反反复复,各种情况下考虑。还有就是以前出现过的问题,修复了,修改了相关代码最好也进行测试,防止旧病复发,所以最好是将测试框架进行自动化测试。
测试 -
java.lang.NoSuchMethodError
这个错误其实很明显,就是没有这个方法,一般情况可能是更新代码少了文件。但是今天遇到一个奇怪的事情,修改的文件都已经更新过了,但是依旧出现了这个问题,究竟为何?```java.lang.NoSuchMethodError:xxxx.xxxx.ClassName.select(ILjava/lang/String;)Lxxxx/xxxx/xxxxE```想了很久,我把全部代码放了一遍后发现没有问题了,想起了看过的一本书说过更新代码的一个陷阱就是有些方法修改后,引用方法的地方也会在编译的时候发生变化。如下代码:`A.java````javapublicclassA{publicstaticvoidmain(String[]args){inta=0;Bb=newB();b.say(a);}}````B.java````javapublicclassB{publicvoidsay(intinput){System.out.println("输入值:"+input);}}```编译运行:```bashE:\cert>javacA.javaE:\cert>javaA输入值:0```然后修改`B.java````...
Java NoSuchMethodError