目录 背景 解决方案: Squid 正向代理 在 Nginx 服务器上部署 Squid 使用 Docker 安装与运行 Squid squid.conf 配置文件示例 在应用服务器上配置和使用 Squid 环境变量/系统设置 现有 Docker 容器的适应性 总结 背景 在医院项目中,由于安全性和其他网络策略的考虑,经常会遇到某些服务器无法直接访问公网的情况。而 Nginx 服务器,因为充当了公网用户和后端服务器之间的媒介(反向代理),是可以与公网进行通信的。为了克服这种局限性,使得相关的服务器(如应用服务器)能访问到互联网,我们一般会引入正向代理的解决方案,也就是在 Nginx 服务器上安装其他透明的正向代理软件,以避免业务上出现异常。 有人可能会问,为什么不直接用 Nginx 服务器上的 Nginx 进行正向代理呢?其实,Nginx 做 HTTP 的正向代理是完全没问题的,配置起来也非常简单。只是,它无法很好地支持 HTTPS 请求的正向代理。 这里展开讲一下正向代理 HTTPS 流量的机制—— 客户端使用明文 HTTP 协议,向代理发送CONNECT请求,请求与目标服务器建立一个 TCP 隧道
1 2 |
CONNECT example.com:443 HTTP/1.1 Host: example.com:443 |
代理尝试与目标服务器建立 TCP 连接 一旦连接建立,代理告诉客户端连接已建立(返回 200 状态码,跟常见的 200 OK 不一样哦)
1 |
HTTP/1.1 200 Connection Established |
然后,客户端开始与目标服务器进行 TLS 握手,以此建立加密的连接 此后,所有流量(已加密)只是通过代理传输,而代理不会(也不能)查看其内容,除非你配置它们为“中间人”攻击模式(Man-in-the-Middle, MITM) Nginx 就麻烦在它默认不支持 CONNECT 方法,因为 Nginx 的设计初衷主要是作为 HTTP 服务器和反向代理来用的,而不是作为正向代理。 所以,通常我们会使用 Squid 来做正向代理,毕竟人家是专业干这个的~ 解决方案: Squid 正向代理 Squid 是一款流行的、高性能的正向代理和缓存服务器,非常适合我们的问题场景。 在 Nginx 服务器上部署 Squid 使用 Docker 安装与运行 Squid […]
View Details1 Maven依赖
1 2 3 4 5 6 7 8 9 10 11 |
<!--第一种方式导入校验依赖--> <dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>2.0.1.Final</version> </dependency> <!--第二种方式导入校验依赖--> <dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator</artifactId> </dependency> |
2 值校验 2.1 @Null注解 被注解的元素必须为null
1 2 |
@Null(message = "必须为null") private String username; |
2.2 @NotNull注解 被注解的元素必须不为null
1 2 |
@NotNull(message = "必须不为null") private String username; |
2.3 @NotBlank注解 验证注解的元素值不为空(不为null、去除首位空格后长度为0) ,并且类型为String。
1 2 |
@NotBlank(message = "必须不为空") private String username; |
2.4 @NotEmpty注解 验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0) ,并且类型为String。
1 2 |
@NotEmpty(message = "必须不为null且不为空") private String username; |
2.5 @AssertTrue注解 被注解的元素必须为true,并且类型为boolean。
1 2 |
@AssertTrue(message = "必须为true") private boolean status; |
2.6 @AssertFalse注解 被注解的元素必须为false,并且类型为boolean。
1 2 |
@AssertFalse(message = "必须为false") private boolean status; |
3 范围校验 3.1 @Min注解 被注解的元素其值必须大于等于最小值,并且类型为int,long,float,double。
1 2 |
@Min(value = 18, message = "必须大于等于18") private int age; |
3.2 @Max注解 被注解的元素其值必须小于等于最小值,并且类型为int,long,float,double。
1 2 |
@Max(value = 18, message = "必须小于等于18") private int age; |
3.3 @DecimalMin注解 验证注解的元素值大于等于@DecimalMin指定的value值,并且类型为BigDecimal。
1 2 |
@DecimalMin(value = "150", message = "必须大于等于150") private BigDecimal height; |
3.4 @DecimalMax注解 验证注解的元素值小于等于@DecimalMax指定的value值 ,并且类型为BigDecimal。
1 2 |
@DecimalMax(value = "300", message = "必须大于等于300") private BigDecimal height; |
3.5 @Range注解 验证注解的元素值在最小值和最大值之间,并且类型为BigDecimal,BigInteger,CharSequence,byte,short,int,long。
1 2 |
@Range(max = 80, min = 18, message = "必须大于等于18或小于等于80") private int age; |
3.6 @Past注解 被注解的元素必须为过去的一个时间,并且类型为java.util.Date。
1 2 3 |
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Past(message = "必须为过去的时间") private Date createDate; |
3.7 @Future注解 被注解的元素必须为未来的一个时间,并且类型为java.util.Date。
1 2 3 |
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Future(message = "必须为未来的时间") private Date createDate; |
4 长度校验 4.1 @Size注解 被注解的元素的长度必须在指定范围内,并且类型为String,Array,List,Map。
1 2 |
@Size(max = 11, min = 7, message = "长度必须大于等于7或小于等于11") private String mobile; |
4.2 @Length注解 验证注解的元素值长度在min和max区间内 ,并且类型为String。
1 2 |
@Length(max = 11, min = 7, message = "长度必须大于等于7或小于等于11") private String mobile; |
5 格式校验 5.1 @Digits注解 验证注解的元素值的整数位数和小数位数上限 ,并且类型为float,double,BigDecimal。
1 2 |
@Digits(integer=3,fraction = 2,message = "整数位上限为3位,小数位上限为2位") private BigDecimal height; |
[…]
View DetailsMybatis Generator简称 MBG,是一个专门为 MyBatis和 ibatis框架使用者提供的代码生成器。也可以快速的根据数据表生成对应的pojo类、Mapper接口、Mapper文件,甚至生成QBC风格的查询对象。
一般在项目中,根据MyBatis Generator的XML配置文件设置生成简单的CRUD,但是复杂的查询或者有关关联的操作还是需要我们写SQL完成。
View Details完全闭合的标签推荐使用正则表达式,因为是轻量级的。
如果是从数据库中查出截断的html文本,最好使用Jsoup组件,支持去除未闭合的标签。