Centos7 搭建yapi接口管理工具

简介

​ Yapi是去哪网开源的一款api管理应用。当前前后端分离开发大势所趋,为减少前后端工程师的沟通障碍,避免不必要的争吵,建议搭建这么一套api管理工具。后端把开发好的接口信息整理到工具中,前端调用统一参阅api管理文档。

​ 注意:如果后端接口修改了,一定要及时更新。

参考:YApi

安装

安装yapi,需要提前安装mongodb,nodejs(6.X以上),最好把git也安装上

安装nodejs

1
2
3
4
5
6
下载源文件
# curl -sL https://rpm.nodesource.com/setup_8.x | bash -
安装
# sudo yum install -y nodejs
查看版本
# node -v

fastDFS分布式文件服务器入门

一.FastDFS介绍

1.1 FastDFS简介

​ FastDFS 开源的分布式文件系统,用纯C语言开发。只能通过专有API进行文件存取访问,不支持POSIX接口方式,不能mount使用。它的主要功能包括:文件存储,文件同步和文件访问,以及高容量和负载均衡。主要解决了海量数据存储问题,特别适合以中小文件(建议范围:4KB < file_size <500MB)为载体的在线服务。

1.2 FastDFS架构

FastDFS架构包括 Tracker server和Storage server。客户端请求Tracker server进行文件上传、下载,通过Trackerserver调度最终由Storage server完成文件上传和下载。

FastDFS 系统有三个角色:跟踪服务器(Tracker Server)、存储服务器(Storage Server)和客户端(Client)。

  Tracker Server:跟踪服务器,主要做调度工作,起到均衡的作用;负责管理所有的 storage server和 group,每个 storage 在启动后会连接 Tracker,告知自己所属 group 等信息,并保持周期性心跳。通过Trackerserver在文件上传时可以根据一些策略找到Storageserver提供文件上传服务。

  Storage Server:存储服务器,主要提供容量和备份服务;以 group 为单位,每个 group 内可以有多台 storage server,数据互为备份。Storage server没有实现自己的文件系统而是利用操作系统 的文件系统来管理文件。

  Client:客户端,上传下载数据的服务器,也就是我们自己的项目所部署在的服务器。

IDEA springboot 修改后自动编译部署

需求

​ 在开发阶段,会经常修改代码,每次修改后都要重启应用才能看到效果,非常麻烦。

解决

  1. 引入依赖

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
            <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional> <!-- 为true的时候才会生效 -->
    <scope>runtime</scope>
    </dependency>

    <!-- 引入插件 -->
    <build>
    <plugins>
    <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
    <fork>true</fork>
    <addResources>true</addResources>
    </configuration>
    </plugin>
    </plugins>
    </build>
  1. 修改IDEA配置

    1.打开Settings(Ctrl+Shift+A)—》Build,Execution,Deployment —>compiler

    2.勾选 Build project automatically

    3.apply

  2. 重启IDEA

  3. 测试

防止XSS攻击

XSS攻击

XSS攻击全称跨站脚本攻击,是一种在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其他用户使用的页面中。例如:不法用户在评论某条博客时,植入类似<script>alert('一个大傻瓜')</script>可执行的js脚本保存到服务器,当在显示的时候,就会出现弹出框,这是最简单的XSS攻击。

服务器处理富文本编辑器提交的内容时, 因排版的需求不能对 HTML 标签进行转义, 但为了防止 XSS 攻击, 又必须过滤掉其中的 JS 代码, 在 Java 中使用 Jsoup 正好可以满足此要求

参考

解决思路

1.在前端页面,可以通过js过滤一下特殊字符。

2.在服务器端通过过滤器,拦截请求,过滤参数,清除危险字符

初识MongoDB

MongoDB

非关系型数据库;分布式文档存储数据库。内容大部分以json的格式存储

MongoDB中基本概念是 文档(document)、集合(collection)、数据库(database)、数据字段\域(field)

一个MongoDB中可以创建多个数据库

admin: 从权限的角度来看,这是”root”数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
local: 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
config: 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。

MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点。

日常积累

比较Long类型 20190215

平时比较数字类型时习惯直接用==来比较,有一次发现两个Long类型的数字直接用==比较没有达到预期效果,仔细一想Long类型是long的封装类型,==比较是比较的引用地址,因此值是一样的,却返回false。

1
2
3
4
Long l1 = new Long(10);
Long l2 = new Long(10);
System.out.println(l1 == l2);//false
System.out.println(l1.longValue() == l2.longValue());//true

上面代码也可以看出:long类型是java中的基本数据类型,可以用==直接比较

Git(分支管理)

分支管理

分支就像两条平行的线,互不干扰;在实际开发过程中,大家都是在分支上工作,互不干扰,而且每次修改后都可以在本地提交,而不用担心代码丢失。在需要时把分支合并,就可以完成协助开发了。

Git的分支是与众不同的,无论创建、切换和删除分支,Git在1秒钟之内就能完成!无论你的版本库是1个文件还是1万个文件。

分支工作原理

在Git仓库创建起始,会默认创建一个master分支。前面介绍版本回退的时候,引入了指针(HEAD)的概念,Git之所以与其他版本管理工具不同,一是因为Git是分布式管理工具,还一个是引入了指针的概念。其实我们在commit的时候,只是在移动指针,所以才会非常快。

严格来说HEAD不是指向提交的,而是指向master分支的,分支指向了提交,所以HEAD指向当前 分支如图:git-br-initial

每一次的修改提交,都被Git记录为一个节点,形成一个时间线,而每次提交当前分支就会指向最新的一次提交,而指针也指向当前分支。

Git(三)

创建SSH Key

前面已经学习了Git在本地的基础操作,之前也说过,Git是分布式版本管理系统,如果只是在本地操作,怎么能叫分布式呢。

实际情况是这样,找一台电脑充当服务器的角色,每天24小时开机,其他每个人都从这个“服务器”仓库克隆一份到自己的电脑上,并且各自把各自的提交推送到服务器仓库里,也从服务器仓库中拉取别人的提交

有个叫GitHub的神奇的网站,从名字就可以看出,这个网站就是提供Git仓库托管服务的,所以,只要注册一个GitHub账号,就可以免费获得Git远程仓库。

本地仓库和远程Git仓库是通过SSH传输的,因此要在github帐号配置本地公钥。

Git(二)

简介

前面一篇已经简单认识了Git,并且学习了8个基础的操作命令,今天继续学习

工作区和暂存区

Git和其他版本管理系统的区别就是,Git有暂存区的概念。

工作区:其实就是我们电脑上能看到的目录,比如之前创建的learngit目录。

版本库:工作区文件夹内有一个隐藏的.git文件夹,这个就是Git的版本库了。版本库中重要组成部分stage(或者叫index)的暂存区,还有创建的第一个分支master,以及指向master的指针HEAD(Git切换版本之所以快,是因为切换版本的时候,只是移动了该指针)。