Java 正确获取客户端真实 IP 方法整理
在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了。 如果使用了反向代理软件,将http://192.168.1.110:2046/的URL反向代理为http://www.abc.com/的URL时,用request.getRemoteAddr()方法获取的IP地址是:127.0.0.1或192.168.1.110,而并不是客户端的真实IP。 经过代理以后,由于在客户端和服务之间增加了中间层,因此服务器无法直接拿到客户端的IP,服务器端应用也无法直接通过转发请求的地址返回给客户端。但是在转发请求的HTTP头信息中,增加了X-FORWARDED-FOR信息。用以跟踪原有的客户端IP地址和原来客户端请求的服务器地址。 当我们访问http://www.abc.com/index.jsp/时,其实并不是我们浏览器真正访问到了服务器上的index.jsp文件,而是先由代理服务器去访问http://192.168.1.110:2046...
Java 程序如何正确的打日志
什么是日志简单的说,日志就是记录程序的运行轨迹,方便查找关键信息,也方便快速定位解决问题。 我们Java程序员在开发项目时都是依赖 Eclipse/ Idea 等开发工具的 Debug 调试功能来跟踪解决 Bug,在开发环境可以这么做,但项目发布到了测试、生产环境呢?你有可能会说可以使用远程调试,但实际并不能允许让你这么做。 所以,日志的作用就是在测试、生产环境没有 Debug 调试工具时开发、测试人员定位问题的手段。日志打得好,就能根据日志的轨迹快速定位并解决线上问题,反之,日志输出不好不能定位到问题不说反而会影响系统的性能。 优秀的项目都是能根据日志定位问题的,而不是在线调试,或者半天找不到有用的日志而抓狂… 常用日志框架log4j, Logging, commons-logging, slf4j, logback, 开发的同学对这几个日志相关的技术不陌生吧,为什么有这么多日志技术,它们都是什么区别和联系呢?相信大多数人搞不清楚它们的关系,下面我将一一介绍一下,以后大家再也不用傻傻分不清楚了。 Logging 如图所示,这是 Java 自带的日志工具类,在 JD...
坑爹的日志无法按天切割问题!
问题背景线上某个新管理型系统出现了日志无法按天切割生成日志文件的问题,所有的日志都在一个日志文件里面,只有每次重启的时候才会重新生成文件。 这个管理系统使用的是 Spring Boot + Logback 框架,查看了 Logback 的日志文件,发现了策略组合使用问题。 以下是有问题的日志配置代码。 <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>INFO</level> </filter> <rollingPolicy class="ch.qos.logback.core.rolling....
2019 好戏连连,阿里又开源了一个分布式事务框架!
最近,Github 宣布私库无限制免费使用了《新年放大招:Github 私库免费了!》,好戏还没演完,这两天阿里的分布式事务框架 GTS 又开源了,开源框架名叫:FESCAR,并发布了第一个开源版本:v0.1.0,大家苦于分布式事务无解的可以参考下这个开源框架,或者其思路对你有帮助。 开源地址: https://github.com/alibaba/fescar FESCAR 是什么?FESCAR(Fast & Easy Commit And Rollback) 是一个用于微服务架构的分布式事务解决方案,它的特点是高性能且易于使用,旨在实现简单并快速的事务提交与回滚。 微服务架构中的分布式事务问题: 从传统的单体应用说起,假设一个单体应用的业务由 3 个模块构成,三者使用单个本地数据源。 这样的话本地事务很自然就可以保证数据一致性。 但是在微服务架构中就不这么简单了,这 3 个模块被设计为 3 个不同数据源之上的 3 个服务,每个服务对应一个数据库。 本地事务当然也可以保证每个服务中的数据一致性,但是扩展到整个应用、整个业务逻辑范围来看,情况如何呢? FESCA...
日志打印的 8 种级别,很详细
日志的输出都是分级别的,不同的设置不同的场合打印不同的日志。下面拿最普遍用的Log4j日志框架来做个日志级别的说明,其他大同小异。 Log4j的级别类org.apache.log4j.Level里面定义了日志级别,日志输出优先级由高到底分别为以下8种。 日志级别 描述 OFF 关闭:最高级别,不打印日志。 FATAL 致命:指明非常严重的可能会导致应用终止执行错误事件。 ERROR 错误:指明错误事件,但应用可能还能继续运行。 WARN 警告:指明可能潜在的危险状况。 INFO 信息:指明描述信息,从粗粒度上描述了应用运行过程。 DEBUG 调试:指明细致的事件信息,对调试应用最有用。 TRACE 跟踪:指明程序运行轨迹,比DEBUG级别的粒度更细。 ALL 所有:所有日志级别,包括定制级别。 所以,日志优先级别标准顺序为: ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF 如果日志设置为L,一个级别为P的输出日志只有当P &g...
阿里启动新项目:Nacos,比 Eureka 更强!
什么是 Nacos?Nacos 是阿里巴巴推出来的一个新开源项目,这是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。 Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。 官网:https://nacos.io 源码:https://github.com/alibaba/nacos 全景图: 架构及概念 服务 (Service) 服务是指一个或一组软件功能(例如特定信息的检索或一组操作的执行),其目的是不同的客户端可以为不同的目的重用(例如通过跨进程的网络调用)。Nacos 支持主流的服务生态,如 Kubernetes Service、gRPC|Dubbo RPC Service 或者 Spring Cloud RESTful Service. 服务注册中心 (Service Registr...
阿里巴巴,排行前 10 的开源项目
1、FastDFSFastDFS是一个开源的分布式文件系统,她对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。 2、DubboDubbo 是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的RPC实现服务的输出和输入功能,可以和 Spring 框架无缝集成。 3、DruidDruid是Java语言中最好的数据库连接池。Druid能够提供强大的监控和扩展功能。 4、Fastjsonfastjson是一个性能很好的Java语言实现的JSON解析器和生成器,来自阿里巴巴的工程师开发。 5、RocketMQRocketMQ是一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。同时,广泛应用于多个领域,包括异步通信解耦、企业解决方案、金融支付、电信、电子商务、快递物流、广告营销、社交、即时通信、移动应用、手游、视频、物联网、车联网等。 6、OceanBaseOceanBase是一个支持海量数据的高性能分布式数据...
腾讯,排行前10的开源项目
1、TarsTars是腾讯从2008年到今天一直在使用的后台逻辑层的统一应用框架TAF(Total Application Framework),目前支持C++和Java两种语言。该框架为用户提供了涉及到开发、运维、以及测试的一整套解决方案,帮助一个产品或者服务快速开发、部署、测试、上线。 它集可扩展协议编解码、高性能RPC通信框架、名字路由与发现、发布监控、日志统计、配置管理等于一体,通过它可以快速用微服务的方式构建自己的稳定可靠的分布式应用,并实现完整有效的服务治理。 2、xLuaUnity3D下Lua编程支持,xLua为Unity3D增加Lua脚本编程的能力,进而提供代码逻辑增量更新的可能。当然不仅仅如此,在coco2dx上的实践告诉我们,以Lua为主打语言的游戏客户端编程是可行的。 3、WeUIWeUI是由微信官方设计团队专为微信移动Web应用设计的UI 库。WeUI是一套同微信原生视觉体验一致的基础样式库,为微信Web开发量身设计,可以令用户的使用感知更加统一。包含button、cell、dialog、toast、article、icon等各式元素。 4、PaxosSt...
Java Cookie 增删改查操作。
Cookie属性了解这几个属性之后,就知道如何进行Cookie的操作了。 nameCookie的名称。 valueCookie的值。 maxAgeCookie的失效时间,有以下几种值,默认为-1 值 说明 负数 浏览器关闭后cookie就失效 0 马上清除cookie 正数 设置过期时间,单位:秒 pathCookie的有效路径,/表示这个路径即该工程下都可以访问该cookie 如果不设置路径,那么只有设置该cookie路径及其子路径可以访问。 获取所有Cookiepublic static Cookie[] getCookies(HttpServletRequest request) { return request.getCookies(); } 获取cookie很简单,直接从request中获取即可。 根据名称获取指定Cookiepublic static Cookie getCookieByName(HttpServletRequest request, String name) { if (StringUtil...
2018最新后端开发人员的路线图
简评:之前,后端开发路线图仅仅是一个技术推荐,且没有明确的方向指明应该遵循的顺序,这份重新制作的指南将会给你一个更好的方向。 现在的 Web 开发与几年前完全不同了,有很多不同的东西可以轻易地把人拒之门外,这也是我们决定制作这个循序渐进指南的原因之一,并让任何人可以清楚地了解他们在 web 开发中扮演的角色。 可以在下面的图片中找到详细的路线图,而我也将在下面的描述中解释每一个步骤。 在开始之前,虽然我们没有在下面的路线图中列出 HTML / CSS 的知识,但建议读者至少要了解一些基本的 HTML / CSS 知识。 Step 1 —— 学习一门语言(Learn a Language)语言有很多选择,我已经将它们分成几类,以便更容易做出决定。对于刚开始进入后端开发的初学者,我建议你选择任何脚本语言,因为它们有很多功能,可以让你快速起步。如果你有一些前端知识,你可能会发现 Node.js 更容易(还有一个很大的就业市场)。 如果你已经是后端开发并了解一些脚本语言,我建议不要选择其他脚本语言,而是从「函数式(Functional)」或「多范式(Mult...
