-
Nginx+Tomcat正确获取客户端请求地址
如果使用的是HTTP协议,直接使用如下配置,即可获取到客户端请求地址和IP信息:```proxy_set_headerHost$host;proxy_set_headerX-Real-IP$remote_addr;proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;```但是如果使用了Nginx使用了HTTPS协议,但是反向代理时使用的是HTTP协议,那么上面的代码就不能获取到正确的协议。Nginx还需要添加如下配置:```proxy_set_headerX-Forwarded-Proto$scheme;```然后Tomcat的Engine下添加如下配置:``````这样就能正确获取到协议信息了。这里还需要说明一点,上面配置均需要配置到`location`中方能有效,之前一直配置在`server`模块内是无效的。>参考文章:[http://feitianbenyue.iteye.com/blog/2056357](http://feitianbenyue.iteye.com/blog/2056357)如果是SpringBoot内嵌的Tomc...
Nginx Tomcat Spring Boot -
Tomcat无法读取手动修改资源文件
在Tomcat下面手动修改资源文件,发现使用`getResourceAsStream`重新读取配置并没有被修改。然后看了一下源码发现,Tomcat对资源文件进行了缓存:```java//(0)Checkforacachedcopyofthisresourcestream=findLoadedResource(name);if(stream!=null){if(log.isDebugEnabled())log.debug("-->Returningstreamfromcache");return(stream);}```所以导致使用`SuccessCodeConfig.class.getResourceAsStream("/successCode.properties");`读取配置时不能读取到修改的内容。所以应该修改为:```javanewFileInputStream(SuccessCodeConfig.class.getResource("/successCode.properties").getFile());```
Tomcat Java -
box-sizing
经常发现`select`和`input`设置的属性一样但是发现两者的实际显示效果不一致,这是因为`box-sizing`属性导致的。>具体参考:[http://www.w3school.com.cn/cssref/pr_box-sizing.asp](http://www.w3school.com.cn/cssref/pr_box-sizing.asp)
box-sizing CSS -
JPA自动生成设置外键名称
使用JPA的`@ManyToOne`时,生成了外键,而且用的`generateDdl`配置自动生成。如果想修改外键名称,可以使用`@ForeignKey`注解去修改外键名称。
JPA Hibernate -
Postman将JSON字符串作为表单数据提交
使用Postman模拟请求,但是发现`body`的`form-data`里面,放入JSON字符串,发送时并不能自动拆分为表单数据。我们选择`body`后面有一个`key-valueedit`的选项,点击后进入以下界面:![Postman](//static.acgist.com/resources/images/article/201711/15096111534951001.png)然后直接粘贴复制的`JSON`字符串就可以自动将你的`JSON`字符串变为表单数据了。
Postman JSON form-data -
Jersey使用
最近在看《JavaRESTfulWebService实战》,以前都是用的RESTEasy,Maven配置:```xmlorg.jboss.resteasyresteasy-jaxb-provider3.0.13.Finalorg.jboss.resteasyresteasy-jaxrs3.0.13.Finalorg.jboss.resteasyresteasy-jackson2-provider3.0.13.Finalorg.jboss.resteasyresteasy-client3.0.13.Final```但是使用Jersey(版本:2.x)时,发现并不是那么顺利。这里整理一下,先贴完整的Maven配置:```xmlorg.glassfish.jersey.corejersey-client2.26org.glassfish.jersey.containersjersey-container-servlet2.26org.glassfish.jersey.injectjersey-hk22.26org.glassfish.jersey.bundlesjaxrs-ri2.4com.fasterxml.ja...
Jersey RESTful -
Spring AOP没有进入切点
今天使用Spring的AOP做了一个方法的拦截验证,但是发现怎么都进入不了切点。```xml```最后网上找到了一个帖子,发现了问题,这段配置直接放在`applicationContext.xml`无效,放到SpringMVC的配置中去就OK了。>帖子链接(七楼):[http://bbs.csdn.net/topics/391049202](http://bbs.csdn.net/topics/391049202)
Spring AOP -
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 下载