分享两个小问题!

本文首发于个人微信公众号《andyqian》,期待你的关注!

前言

  有好一段时间没有更新文章了,期间有好几次提笔。却又不知,如何下手。今天来分享两个常见的小问题。

(一) Linux上传文件后大小总是为0 kb大小

问题描述:无论是使用xftp工具,还是使用rz命令上传至Linux服务器中的文件大小总是为0。

导致原因 :
 经分析,由于系统磁盘被占满导致。

可以通过命令df -lh命令来查看系统情况。 如下所示:

 
  1. [root@-tomcat01 ~]# df -lh

  2. Filesystem      Size  Used Avail Use% Mounted on

  3. /dev/vda1        79G   79G   0G  100% /

  4. tmpfs           1.9G     0  1.9G   0% /dev/shm

  5. /dev/vda3        16G   44M   15G   1% /home

其中:

  1. Size :表示该磁盘(挂载区)的总大小。

  2. Used :表示已使用大小。

  3. Avail: 表示剩余可用大小。

  4. Use%:  表示磁盘使用率。

  5. Mounted on:表示挂载区,其中 / 表示根目录

备注: 我们可以通过上述参数,来了解系统当前磁盘的使用情况。

解决办法:

  1. 删除掉服务器中多余的文件,释放服务器资源。

  2. 如果服务器没有多余文件,可以考虑增加磁盘空间。

(二) 获取用户真实IP地址

  我们在设计系统时,有很多场景需要获取到用户的真实IP地址。其中部分业务还依赖用户的真实IP地址。
包括但不限于以下场景::

  1. 记录用户登录行为。

  2. 在关键业务中,记录用户请求ip地址。

  3. 用户短时间內频繁切换IP地址,需要进行安全验证等等。

在单机应用时,我们通常使用request.getRemoteAddr(); 方法就能获取到用户的真实ip地址。但使用负载,以及代理服务器时,我们就应该使用下述方法进行获取:

 
  1.  public static String getRemoteAddr(HttpServletRequest request) {

  2.    String ip = request.getHeader("x-forwarded-for");

  3.        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {

  4.            ip = request.getHeader("Proxy-Client-IP");

  5.        }

  6.        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {

  7.            ip = request.getHeader("WL-Proxy-Client-IP");

  8.        }

  9.        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {

  10.           ip = request.getRemoteAddr();

  11.        }

  12.  
  13.        return ip;

  14.    }

如果使用nginx作为代理服务器,通常建议在nginx/conf下nginx.conf文件中对应的location路径下添加以下配置:

 
  1.    proxy_set_header Host $host;

  2.    proxy_set_header X-Real-IP $remote_addr;

  3.    proxy_set_header REMOTE-HOST $remote_addr;

  4.    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

最后

  在上一篇文章中,我谈到了用户隐私。作为软件从业者,我们有义务,更有责任保护好用户的隐私数据。一些稍成规模的公司。一般都会有安全部门。对业务数据提出安全性的建议以及对用户数据安全做攻防。最近做的业务与安全联系的比较多。在这里就再啰嗦几句。就算抛砖引玉了。

  1. 对于用户敏感信息:

手机号,邮箱,登录密码,交易密码,身份证信息

等隐私数据均要以密文的形式落库。在业务层进行数据的加解密。

  1. 接口提供出来的隐私数据,均要进行混淆处理。

  2. 系统中关键路径中尽可能的记录用户信息。(如登录请求,记录用户ip地址等等)。

推荐阅读:

谈谈用户隐私

Git 常用命令以及常见错误

再谈MySQL JSON数据类型

说说Java日志

这里写图片描述

扫码关注,一起进步

个人博客: http://www.andyqian.com

猜你喜欢

转载自my.oschina.net/u/1462914/blog/1845886