场景
系统为Centos6或7, 多个服务器之间存在时间合法性验证,由于各服务器时间不统一,验证不通过。
解决方法
执行如下命令矫正本地时间,网络同步
系统为Centos6或7, 多个服务器之间存在时间合法性验证,由于各服务器时间不统一,验证不通过。
执行如下命令矫正本地时间,网络同步
Https(Secure Hypertext Transfer Protocol)相比Http(Hypertext Transfer Protocol Vertion),字面意思,更安全。Https是在Http协议基础上增加了SSL加密传送信息的协议, 传输加密,保证通信过程数据不会被泄露或窜改,防信息泄露如钓鱼网站。
为保障传输安全, 后端接口可优先考虑使用post方法, 传输时,https将请求头及body参数等加密, url参数不会被加密(url如果被加密, 就找不到资源了, 显而易见, url不做加密处理)。
Https连接过程:
Https需配置第三方签发的证书,配置过程如下.
个人使用,免费SSL证书即可,签发速度快,可保护完整域名,不支持通配符。这里使用的是阿里云域名服务,进入域名基本信息,选择免费开启SSL证书,按照引导操作配置,最终如下
如下xml为例:
解析引入dom4j,这里使用的为2.0.0版本,具体文档到社区查看,github已有最新2.0.1版本,dom4j更新很慢,也可以说比较稳定。
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
日志输出使用:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
示例为DOMParser.parseFromString()的简单使用。
以下用到ES6的多行字符串,注意包含str值的两个点是Tab键上面、数字键1左边的按键,而不是单引号。
要解析的xml文件部分数据如下:
Swagger用于定义API文档,实现前后端开发分离,测试时不再需要浏览器输入URL访问Controller。对于post请求,无需使用postman模拟,在接口文档中填参数,可直接模拟发请求。本文介绍Swagger2的引入及常用注解。
|
|
新建类,注解方式引入Swagger2
Spring-boot相比SpringMVC,基本干掉了繁琐的配置文件,Spring-boot自动完成默认配置。若有自定义配置,在application.properties配置文件覆盖即可。
Spring-boot内置tomcat,部署时打成jar包,放到线上启动即可,但独立服务,包文件较大。若多个Spring-boot想使用同一个tomcat或者运维要求Spring-boot项目同其他web项目放到同一容器里,则要考虑打成war包。
使用Maven进行项目管理及构建,打包类型配置在依赖文件pom.xml指明。
1.声明打包类型为jar
2.使用命令 mvn clean package打包部署后,执行
定时任务在开发中很常见,最近在清理数据库过期数据时用到定时任务,定时任务简单使用如下。
启动类中使用注解@EnableScheduling
近期新增代理商系统,游戏内加入webview以及从浏览器登录系统两种方式。作为服务端开发,与主管讨论之后,不同已有基于netty开发的多个服务器,服务端新增基于Spring-boot开发的服务器提供微服务。本文介绍安全机制设计与实现。
安全验证采用token做密钥,摘要算法保证内容正确。摘要算法采用最常见的MD5即可。
加密过程是服务端生成token,并把这个token发给客户端,客户端(这里包括WebView内页面)每次请求都附带stime以及token, 对这个字符串做计算形成摘要(sign)。
客户端调用WebView之前,通过protobuffer协议获取token。
多种方式可选。
1.在线创建:https://start.spring.io/ 下载生成压缩包导入IDE即可
2.IDE创建(idea为例,两种方式):
3.Spring Boot CLI
下载后,解压,将bin目录添加至系统变量Path中,打开cmd, 运行spring –version验证是否安装成功
运行如下命令创建简单项目(本质与在线创建方式相同,连接start.spring.io并下载zip包)
正则表达式用于各个情形的数据校验,用于匹配字符串。例如对请求参数的校验,客户端给服务器发送数据前,需初步对数据进行合法性校验;由于客户端数据不可信,服务器要对数据进行严格的合法性校验。
本文记录的是常用的身份证及手机号等合法性正则校验,以Java编程为例。
^ 匹配字符串的起始位置,如果将 ^ 用作括号表达式中的第一个字符,则会对字符集求反,[^abc] 与除 a、b 和 c 以外的任何字符匹配
$ 匹配字符串的结束位置
* 任意次(零次或多次)匹配前面的字符或子表达式,等效于 {0,}
+ 至少一次(一次或多次)匹配前面的字符或子表达式,等效于 {1,}
? 零次或一次匹配前面的字符或子表达式,等效于 {0,1}
. 匹配单个字符, a.c 与“abc”、“a1c”和“a-c”匹配
| 或,z|food 与“z”或“food”匹配。(z|f)ood 与“zood”或“food”匹配
( ) 小括号表示匹配括号中全部字符
[] 中括号表示匹配括号中一个字符 范围描述 如[0-9 a-z A-Z]
{} 大括号用于限定匹配次数,如{n}表示匹配n次;{n,}表示至少匹配n次;{n,m}表示至少匹配n次,最多匹配m次
\ 转义字符,如上基本符号匹配都需要转义字符,如 * 表示匹配*号。\f 为换页符,\n 为换行符,\r 为回车符,\t 为Tab 字符,\v 为垂直制表符
\w 表示英文字母和数字以及下划线,等效于 [A-Za-z0-9_]
\W 英文字母,数字,下滑线以外的字符,等效于 [^A-Za-z0-9_]
\d 表示数字,等效于 [0-9]
\D 非数字,等效于 [^0-9]
\s 任何空白字符。其中包括空格、制表符和换页符,[\f\n\r\t\v]
\S 任何非空白字符,[^\f\n\r\t\v]
exp1(?=exp2) 前瞻(look ahead),查找exp2前面的exp1,如 a(?=b) 匹配ab但不匹配ac
(?<=exp2)exp1 后顾(look behind),查找exp2后面的exp1,如 (?<=b)a 匹配ba但不匹配bc
exp1(?!exp2) 负前瞻,查找后面不是exp2的exp1, 如 a(?!b) 匹配ac但不匹配ab
(?<!=exp2)exp1 负后顾,查找前面不是exp2的exp1, 如 (?<!b)a 匹配ca但不匹配ba