Clay 的技术空间

用进废退 | 艺不压身

配置跨域

下述的 add_header 末尾都可以加上了 always,它表示不管 HTTP 返回状态码是多少都会使 add_header 生效,有些时候服务端可能会返回 4XX 的 HTTP 状态码,这时候如果少了 always 会导致 add_header 失效,从而导致浏览器报跨域错误。

1
2
3
4
5
6
7
8
9
10
11
12
location / {
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Allow-Credentials' 'true' always;
add_header 'Access-Control-Allow-Methods' 'GET,HEAD,PUT,POST,DELETE,PATCH,OPTIONS' always;
add_header 'Access-Control-Allow-Headers' 'Accept,Authorization,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Origin' always;

if ($request_method = 'OPTIONS') {
return 204;
}

...
}
阅读全文 »

Docker 新建并启动容器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 语法
# docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

# 新建并以交互式启动centos容器,并为容器重新分配一个伪输入终端,同时指定容器名称
# docker run -it --name="centos" centos /bin/bash

# 新建并后台启动centos容器,如果启动后的容器内部没有前台运行的进程,容器默认会马上停止
# docker run -d centos

# 参数OPTIONS
# --name="new-name" 或者 --name new-name:为容器指定一个名称,该名称会在执行"docker ps"的时候显示出来
# -d:后台启动容器,并返回容器ID,即启动守护式容器
# -i:以交互式运行容器,通常与-t同时使用
# -t:为容器重新分配一个伪输入终端,通常与-i同时使用
# -P:随机端口映射
# -p:指定端口映射,有四种格式:ip:hostport:containerport、ip::containerport、hostport:containerport、containerport
# --privileged=true:使用该参数指定容器内的root拥有真正的root权限,false代表容器内的root只拥有外部宿主机的一个普通用户权限
阅读全文 »

Docker 帮助命令

1
2
3
4
5
6
7
8
9
10
11
12
# 查看Docker的版本
# docker version

# 查看Docker的详细信息
# docker info

# 查看Docker的命令帮助手册
# docker --help

# 查看Docker具体某个操作的命令帮助手册
# docker images --help
# docker search --help
阅读全文 »

前言

在日常开发中,避不开的就是参数校验,有人说前端不是会在表单提交之前进行校验的吗?在后端开发中,不管前端怎么样校验,后端都需要进行再次校验,这是为了系统安全。因为前端的校验很容易被绕过,当使用 PostMan 来测试时,如果后端没有校验,容易引发安全问题。值得一提的是,本文适用于 Spring Boot 与 Spring Cloud 项目。

JSR303 简介

JSR-303 是 JAVA EE 6 中的一项子规范,叫做 Bean Validation,官方的参考实现是 Hibernate Validator。值得一提的是,Hibernate Validator 提供了 JSR-303 规范中所有内置 Constraint 的实现,除此之外还有一些附加的 Constraint。

常用约束注解

约束注解的名称约束注解的说明
@Null 用于校验对象为 Null
@NotNull 用于校验对象不能为 Null,无法校验长度为 0 的字符串
@NotBlank 用于校验 String 类,不能为 Null,且 trim() 之后的 size 大于零
@NotEmpty 用于校验集合类、String 类不能为 Null,且 size 大于零,但是带有空格的字符串校验不出来
@Size 用于校验对象(Array、Collection、Map、String)长度是否在给定的范围之内
@Length 用于校验 String 对象的大小必须在指定的范围内
@Pattern 用于校验 String 对象是否符合正则表达式的规则
@Email 用于校验 String 对象是否符合邮箱格式
@Min 用于校验 Number 和 String 对象是否大等于指定的值
@Max 用于校验 Number 和 String 对象是否小等于指定的值
@AssertTrue 用于校验 Boolean 对象是否为 true
@AssertFalse 用于校验 Boolean 对象是否为 false
阅读全文 »

Github 项目地址

前言

与以前相比,Incubator Dubbo Ops 项目中 master 分支的代码进行了大量重构,重构之后的代码目前在 develop 分支;同时 develop 分支的部署方式发生了不少变化,主要体现在 develop 分支采用了前后端分离的部署方式,下面将会分别详细介绍 master 与 develop 分支具体的部署方式。此教程的创建日期为 2018-12-20,由于官方项目正在不断迭代开发中,因此此教程在日后可能与官方的最新代码不同步,一切以官方的 Github 说明文档为准。

incubator-dubbo-ops master 分支(截止 2018-12-20)

incubator-dubbo-ops-master

阅读全文 »

单一应用架构

all-in-one

  • 优点
    1. 简单实用、便于维护,开发成本较低
  • 缺点
    1. 部署麻烦,添加、修改个别模块功能,需要重新将所有模块的代码部署到各个服务器
    2. 单台服务器的性能有限,不适合对外提供所有模块功能
    3. 存在单点故障问题
  • 关键点
    1. 数据访问框架(ORM)
      阅读全文 »
0%