Commit e4ca9bbe authored by custom's avatar custom

Merge origin/master into master

parents 1b973873 8f20cf5f
# 跨域访问(CORS)
## 简介:
CORS需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能,IE浏览器不能低于IE10。
整个CORS通信过程,都是浏览器自动完成,不需要用户参与。对于开发者来说,CORS通信与同源的AJAX通信没有差别,代码完全一样。浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感觉。
因此,实现CORS通信的关键是服务器。只要服务器实现了CORS接口,就可以跨源通信。
## 使用说明:
#### 1.修改web.xml文件:
添加Filter:
![](/assets/cors-web.png)
各参数含义:
allowedMappings: 允许跨域资源(必填)
allowedHeader:\(允许的头部参数)
allowedOrigin\(允许的请求源)
allowedMethod\(允许的请求方法\)
allowedCredentials\(是否允许携带证书)
MaxAge\(最大时长)
#### 2.发送跨域请求:
2.1 跨域登录,观察http请求response
![](/assets/cors-login.png)
2.2 登录成功所返回的信息:sessionId\(用于用户登录验证) csrf\_token(用于csrf验证)
![](/assets/cors-login1.png)
2.3 将sessionId\(Authorization\) csrf\_\_token\(X-CSRF-\_TOKEN\)添加进requestHeader中进行后续访问
![](/assets/cors-query.png)
2.4 得到返回信息
![](/assets/cors-quer1.png)
# 代码生成器
# 简介:
本功能可根据数据表生成相关的dto,mapper impl,service,controller与html,包含相关的增删改查功能。
**网页入口**:http:\/\/localhost:8080\/hel\/generator\/generator.html
## 使用说明:
**主页面:**
![](/assets/gnerator1.png)
**项目路径**:指向本机hap。
**包父路径:**指向hap的包路径。
**包路径:**为所要生成的包名。
**选择表:**选中所要维护的表。
**文件名:** 将自动根据表名生成对应名称(修改dto可选择是否根据dto修改其余文件,也可单独修改其余文件)( 文件创建之前会判断项目中是否有同名文件 ) 。
**是否创建:**勾选创建文件。
**是否覆盖:**勾选则可以覆盖同路径下同名文件。
**选择ftl模板:**可根据选择的ftl模板生成对应的html页面。
## 生成示例:
**1:相关文件**
![](/assets/generator2.png)
2:相关的dto
![](/assets/generator4.png)
**3:相关controller**(包含增删改查)
![](/assets/generator5.png)
**4:相关mapper**(包含基础resultMap)
![](/assets/generator6.png)
**5:生成基础的增删改查功能的html页面**
![](/assets/generator3.png)
**6:service文件** (mapper类似)
![](/assets/gernerator7.png)
# 日志管理 ELK(ElasticSearch+Logstash+Kibana)
## 简介:
**ElasticSearch:**一个开源分布式搜索引擎,具有分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等特点。<p>**Logstash:**一个完全开源的工具,可以对你的日志进行搜集,过滤,并将其储存供以后使用。<p>**Kibana:**为Logstash和ElasticSearch提供日志分析的友好Web界面,可以汇总,分析和搜索重要的数据日志。
##下载说明:
由于Logstash的运行依赖于Java环境, 而Logstash 1.5以上版本不低于java 1.7,因此推荐使用最新版本的Java。因为我们只需要Java的运行环境,所以可以只安装JRE,不过这里我依然使用JDK,请自行搜索安装<p>
ELK下载https://www.elastic.co/downloads/
## 使用说明:
### ElasticSearch:
#### 启动服务:
运行bin/elasticsearch.bat文件开启服务。查看127.0.0.1:9200出现如下页面运行成功<p>
#![](/assets/elasticsearch.png) <p>
#### 基础操作:es支持restful操作。<p>
获取对应文档:<p>
GET /[_index]/[_type]/_search <p>
上传文档: <p>
```javascript
PUT /[_index]/[_type]/[_id}
{ "first_name" : "Jane",
"last_name" : "Smith",
"age" : 32,
"about" : "I like to collect rock albums",
"interests": [ "music" ] }
```
<p>
操作文档:http://es.xiaoleilu.com/030_Data/15_Get.html
#### 面向文档:
Elasticsearch是面向文档(document oriented)的,这意味着它可以存储整个对象或文档(document)。然而它不仅仅是存储,还会索引(index)每个文档的内容使之可以被搜索。在Elasticsearch中,你可以对文档(而非成行成列的数据)进行索引、搜索、排序、过滤。这种理解数据的方式与以往完全不同,这也是Elasticsearch能够执行复杂的全文搜索的原因之一。<p>
ELasticsearch使用JSON,作为文档序列化格式。
以下使用JSON文档来表示一个用户对象:<p>
```javascript
{
"email": "john@smith.com",
"first_name": "John",
"last_name": "Smith",
"info": {
"bio": "Eco-warrior and defender of the weak",
"age": 25,
"interests": [ "dolphins", "whales" ]
},
"join_date": "2014/05/01"
}
```
在Elasticsearch中,文档归属于一种类型(type),而这些类型存在于索引(index)中,我们可以画一些简单的对比图来类比传统关系型数据库:<p>
Relational DB -> Databases -> Tables -> Rows -> Columns<p>
Elasticsearch -> Indices -> Types -> Documents -> Fields<p>
Elasticsearch集群可以包含多个索引(indices)(数据库),每一个索引可以包含多个类型(types)(表),每一个类型包含多个文档(documents)(行),然后每个文档包含多个字段(Fields)(列)。
#### elasticsearch 分布式:
Elasticsearch为分布式而生
Elasticsearch致力于隐藏分布式系统的复杂性。以下这些操作都是在底层自动完成的:<p>
*将你的文档分区到不同的容器或者分片(shards)中,它们可以存在于一个或多个节点中。<p>
*将分片均匀的分配到各个节点,对索引和搜索做负载均衡。<p>
*冗余每一个分片,防止硬件故障造成的数据丢失。<p>
*将集群中任意一个节点上的请求路由到相应数据所在的节点。<p>
*无论是增加节点,还是移除节点,分片都可以做到无缝的扩展和迁移<p>
#### 集群部署:
伪分布式环境搭建:创建3个es环境,修改其config/elasticsearch.yml配置文件<p>
1:<p>
cluster.name: elasticsearch<p>
node.name: node1<p>
2:<p>
cluster.name: elasticsearch<p>
node.name: node2<p>
http.port: 9202<p>
3:<p>
cluster.name: elasticsearch<p>
node.name: node3<p>
http.port: 9203<p>
es会自动搜索同一网段下的cluster.name(集群名)相同的es做成集群
将indeces(索引)下的分片(默认一个索引5个主分片每个分片一个复制分片)平分到不同es节点(node)下。
#### elasticsearch-head插件安装:
是es集群管理插件。执行如下命令安装插件:<p>
elasticsearch/bin/plugin install mobz/elasticsearch-head<p>
打开:http://localhost:9200/_plugin/head/ <p>
下图为以上操作建立的集群。
![](/assets/es.png) <p>
相关文档:http://es.xiaoleilu.com/020_Distributed_Cluster/05_Empty_cluster.html <p>
### Logstash:
#### 运行:
logstash -e input { stdin { } } output { stdout { codec => rubydebug } } <p>
输入报文 helloworld 可以在控制台看到对应报文。<p>
2016-10-20T09:05:53.446Z LAPTOP-RKIO0CO4 hellowrold <p>
#### 通过配置文件运行:
在bin目录下创建配置文件test.conf: <p>
input为logstash配置输入流,logstash支持多种input方式包括file redis TCP UDP syslog lumberjack等。<p>
filter过滤logstash输入流,并可以解析输入流。<p>
ouput为logstash输出流,支持多种输出方式如elsaticearch file email tcp hdfs等,并可以配置相关参数如在es中配置索引名和type名<p>
<p> 示例使用file方式获取logstash输入流需将path更改为项目log地址<p>
```
input {
file{
path => "C:\Users\zjl\.IntelliJIdea2016.2\system\tomcat\Unnamed_hap-parent\logs\hap.log"
start_position =>"beginning"
}
}
filter{
if ([message] =~ "^\s") {
drop {}
}
grok{
match => ["message", " .* %{GREEDYDATA:level} \[%{GREEDYDATA:accountId}\] \[%{GREEDYDATA:requestId}\] %{GREEDYDATA:dao} - %{GREEDYDATA:info}\s"]
}
}
output {
stdout {
}
elasticsearch {
hosts => "localhost:9200"
}
}
```
<p>若使用tcp为logstash配置输入修改logback.xml文件添加输出方式<p>
```
<appender name="stash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%X{accountId}] [%X{requestId}] %logger - %msg%n</pattern>
</encoder>
<destination>elk-hap:4560</destination></appender>
```
<p>
相关文档:http://kibana.logstash.es/content/logstash/plugins/input/file.html
<p>
在Logstash文件/bin目录下打开终端输入logstsh -f test.conf运行logstash解析日志文件 <p>
作为一个要长期运行的程序。发行包内都带有sysV或者systemd风格的启动程序配置,你只需要直接使用即可,以RPM为例 /etc/init.d/logstash 脚本中,会加载 /etc/init.d/functions 库文件,利用其中的 daemon 函数,将 logstash 进程作为后台程序运行。所以,你只需把自己写好的配置文件,统一放在 /etc/logstash/conf.d 目录下(注意目录下所有配置文件都应该是 .conf 结尾,且不能有其他文本文件存在。因为 logstash agent 启动的时候是读取全文件夹的),然后运行 service logstash start 命令即可。<p>
![](/assets/logstash.png)
<p>
### Kibana:
##### 打开文件bin目录下kibana.bat开启服务 <p> <p>
##### 浏览器打开localhost:5601查看通过logstash解析的日志文件
##### config/kibana.yml文件可进行对kibana相关配置 <p> <p>
![](/assets/kibana.png)
![](/assets/kibanaview.png)
......@@ -18,6 +18,12 @@
* 2.3 Checkstyle
* III. 后端开发
* [3.1 用户安全策略](/后端开发/user-security-strategy.md)
* [3.2 审计](/后端开发/audit.md)
* [3.3 锁机制](/后端开发/lock.md)
* [3.4 日志管理](/后端开发/elk.md)
* [3.5 代码生成器](/后端开发/code-generator.md)
* [3.6 跨域访问](/后端开发/3.24-cors.md)
* IV. 前端JavaScript开发
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment