lombok一些注解的含义

前言

lombok一些注解的含义整理

1、@Accessors(chain = true)

链式风格,在调用set方法时,返回这个类的实例对象,比如:a.b.c

2、@Data

在JavaBean或类JavaBean中使用,这个注解包含范围最广,它包含getter、setter、NoArgsConstructor、equals、canEqual、hashCode、toString 注解,即当使用当前注解时,会自动生成包含的所有方法;

……

阅读全文

git的日常操作命令整理

前言

git的一些常见命令操作整理

1、下载

depth用于指定克隆深度,为1即表示只克隆最近一次commit,可以减少下载的容量

1
git cone --depth=1 {http://xxx/url}

2、撤销commit

默认撤销,不撤销本地代码,撤销commit,并且撤销git add

1
git reset --mixed HEAD^

不删除工作空间改动代码,撤销commit,不撤销git add

1
git reset --soft HEAD^

删除工作空间改动代码,撤销commit,撤销git add

……

阅读全文

caffeine和springcache

前言

说到caffeine,一般会对比 google 家的 guava,这里只做浅析。

缓存

缓存分为本地缓存和远端缓存。
常见的远端缓存有Redis,MongoDB;
本地缓存一般使用map的方式保存在本地内存中。

一般我们在业务中操作缓存,都会操作缓存和数据源两部分。
如:put数据时,先插入DB,再删除原来的缓存;get数据时,先查缓存,命中则返回,没有命中时,需要查询DB,再把查询结果放入缓存中。
如果访问量大,我们还得兼顾本地缓存的线程安全问题。
必要的时候也要考虑缓存的回收策略。

……

阅读全文

前端编码安全

前端js开发 – 转自腾讯github

I. 代码实现

1.1 原生DOM API的安全操作

1.1.1【必须】HTML标签操作,限定/过滤传入变量值

  • 使用innerHTML=、outerHTML=、document.write()、document.writeln()时,如变量值外部可控,应对特殊字符(&, <, >, ", ')做编码转义,或使用安全的DOM API替代,包括:innerText=
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// 假设 params 为用户输入, text 为 DOM 节点
// bad:将不可信内容带入HTML标签操作
const { user } = params;
// ...
text.innerHTML = `Follow @${user}`;

// good: innerHTML操作前,对特殊字符编码转义
function htmlEncode(iStr) {
	let sStr = iStr;
	sStr = sStr.replace(/&/g, "&amp;");
	sStr = sStr.replace(/>/g, "&gt;");
	sStr = sStr.replace(/</g, "&lt;");
	sStr = sStr.replace(/"/g, "&quot;");
	sStr = sStr.replace(/'/g, "&#39;");
	return sStr;
}

let { user } = params;
user = htmlEncode(user);
// ...
text.innerHTML = `Follow @${user}`;

// good: 使用安全的DOM API替代innerHTML
const { user } = params;
// ...
text.innerText = `Follow @${user}`;

1.1.2【必须】HTML属性操作,限定/过滤传入变量值

……

阅读全文

java编码安全

后端java开发 – 转自腾讯github

1.1 数据持久化

1.1.1【必须】SQL语句默认使用预编译并绑定变量

Web后台系统应默认使用预编译绑定变量的形式创建sql语句,保持查询语句和数据相分离。以从本质上避免SQL注入风险。

如使用Mybatis作为持久层框架,应通过#{}语法进行参数绑定,MyBatis 会创建 PreparedStatement 参数占位符,并通过占位符安全地设置参数。

示例:JDBC

……

阅读全文

maven校验依赖包CVE漏洞

前言

maven也可以校验依赖包是有有CVE漏洞

1、maven检测依赖包CVE漏洞

1
mvn verify -DskipTests=true
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
<build>
    <plugins>
        <!-- owasp check CVE 检查依赖包是否有漏洞  command: mvn verify -->
        <plugin>
            <groupId>org.owasp</groupId>
            <artifactId>dependency-check-maven</artifactId>
            <version>6.5.1</version>
            <executions>
                <execution>
                    <goals>
                        <goal>check</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

2、检测结果demo

第一次执行因下载CVE数据有些慢

……

阅读全文

Linux应急响应手册:从了解情况到输出报告的完整流程

前言

整理一份应急响应的完整流程手册,覆盖从接到告警到输出报告的全过程,Linux 为主、Windows 为辅。整体流程为:了解情况 → 遏制传播 → 排查取证 → 恢复业务 → 跟踪总结。

注意:实际应急情况复杂,需根据现场灵活处置;操作前先征得授权;整个过程中不要被现场人员的描述误导,必要的话亲自检测,不要完全相信听来的东西。

……

阅读全文

jvm的大dump文件分析

前言

参考dump文件的大小,如果超过6G、8G 一般我们本地电脑无法打开,可以找大容量的linux服务器,配置对应启动的jvm 内存后可以参考下面的步骤

1、下载linux版本的mat

1
wget http://eclipse.stu.edu.tw/mat/1.9.0/rcp/MemoryAnalyzer-1.9.0.20190605-linux.gtk.x86_64.zip

2、解压zip包

unzip MemoryAnalyzer-1.9.0.20190605-linux.gtk.x86_64.zip

3、修改linux mat的堆内存大小(看自己下载的堆的大小,默认mat的堆支持1g)

1
vi MemoryAnalyzer.ini
1
2
3
4
5
6
-startup
plugins/org.eclipse.equinox.launcher_1.5.0.v20180512-1130.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64_1.1.700.v20180518-1200
-vmargs
-Xmx10240m

4、执行分析脚本

1
./ParseHeapDump.sh [hprof文件] org.eclipse.mat.api:suspects org.eclipse.mat.api:overview org.eclipse.mat.api:top_components

可能因为 jdk 版本不一致导致启动失败,可以调整 jdk 为1.8.*

1
2
3
export JAVA_HOME=/opt/soft/jdk/jdk1.8.0_66/
export PATH=$JAVA_HOME/bin:$PATH
"$(dirname -- "$0")"/MemoryAnalyzer -consolelog -application org.eclipse.mat.api.parse "$@"

5、等待分析结果

……

阅读全文

maven的scope参数

1、用maven引用没进中央仓库的包

在使用maven的时候,如果我们要依赖一个本地的jar包的时候,通常都会使用<scope>system</scope>和<systemPath></systemPath>来处理。
例如:

1
2
3
4
5
6
7
8
<!--引用本地jar包-->
<dependency>
    <groupId>com.mytest</groupId>
    <artifactId>test</artifactId>
    <version>1.0</version>
    <scope>system</scope>
    <systemPath>${pom.basedir}/lib/test-1.0.jar</systemPath>
</dependency>

如果你仅仅是这么做了,在你使用SpringBoot打包插件生成jar包的时候,你会发现这个jar包不会被打进去,进而出现错误。
这个就需要在maven插接中配置一个includeSystemScope属性:

……

阅读全文

python工具-faker测试数据生成器

1、参考

官方地址: https://faker.readthedocs.io/
ruby 和 java 下都有类似的 faker 工具,但是对比过 java 的,还是 python 这个完善很多。ruby 的暂没测试

2、用法示例

1
2
3
4
5
from faker import Faker

fake = Faker(locale='zh_CN') 
#为生成数据的文化选项,默认为en_US,只有使用了相关文化,才能生成对应的随机信息
#由于文化差异,设置文化的时候会导致有些字段比如省份等会出现方法报错等问题

3、常用函数介绍

参数 说明
city_suffix() 市,县
country() 国家
country_code() 国家编码
district() 区
geo_coordinate() 地理坐标
latitude() 地理坐标(纬度)
longitude() 地理坐标(经度)
lexify() 替换所有问号(“?”)带有随机字母的事件。
numerify() 三位随机数字
postcode() 邮编
province() 省份
street_address() 街道地址
street_name() 街道名
street_suffix() 街、路
random_digit() 0~9随机数
random_digit_not_null() 1~9的随机数
random_element() 随机字母
random_int() 随机数字,默认0~9999,可以通过设置min,max来设置
random_letter() 随机字母
random_number() 随机数字,参数digits设置生成的数字位数
color_name() 随机颜色名
hex_color() 随机HEX颜色
rgb_color() 随机RGB颜色
safe_color_name() 随机安全色名
safe_hex_color() 随机安全HEX颜色
bs() 随机公司服务名
company() 随机公司名(长)
company_prefix() 随机公司名(短)
company_suffix() 公司性质
credit_card_expire() 随机信用卡到期日
credit_card_full() 生成完整信用卡信息
credit_card_number() 信用卡号
credit_card_provider() 信用卡类型
credit_card_security_code() 信用卡安全码
currency_code() 货币编码
am_pm() AM/PM
century() 随机世纪
date() 随机日期
date_between() 随机生成指定范围内日期,参数
date_between_dates() 随机生成指定范围内日期,用法同上
date_object() 随机生产从1970-1-1到指定日期的随机日期。
date_this_month()
date_this_year()
date_time() 随机生成指定时间(1970年1月1日至今)
date_time_ad() 生成公元1年到现在的随机时间
date_time_between() 用法同dates
future_date() 未来日期
future_datetime() 未来时间
month() 随机月份
month_name() 随机月份(英文)
past_date() 随机生成已经过去的日期
past_datetime() 随机生成已经过去的时间
time() 随机24小时时间
timedelta() 随机获取时间差
time_object() 随机24小时时间,time对象
time_series() 随机TimeSeries对象
timezone() 随机时区
unix_time() 随机Unix时间
year() 随机年份
file_extension() 随机文件扩展名
file_name() 随机文件名(包含扩展名,不包含路径)
file_path() 随机文件路径(包含文件名,扩展名)
mime_type() 随机mime Type
ascii_company_email() 随机ASCII公司邮箱名
ascii_email() 随机ASCII邮箱
ascii_free_email()
ascii_safe_email()
company_email()
domain_name() 生成域名
domain_word() 域词(即,不包含后缀)
email()
free_email()
free_email_domain()
f.safe_email() 安全邮箱
f.image_url() 随机URL地址
ipv4() 随机IP4地址
ipv6() 随机IP6地址
mac_address() 随机MAC地址
tld() 网址域名后缀(.com,.net.cn,等等,不包括.)
uri() 随机URI地址
uri_extension() 网址文件后缀
uri_page() 网址文件(不包含后缀)
uri_path() 网址文件路径(不包含文件名)
url() 随机URL地址
user_name() 随机用户名
isbn10() 随机ISBN(10位)
isbn13() 随机ISBN(13位)
job() 随机职位
paragraph() 随机生成一个段落
paragraphs() 随机生成多个段落,通过参数nb来控制段落数,返回数组
sentence() 随机生成一句话
sentences() 随机生成多句话,与段落类似
text() 随机生成一篇文章(不要幻想着人工智能了,至今没完全看懂一句话是什么意思)
word() 随机生成词语
words() 随机生成多个词语,用法与段落,句子,类似
binary() 随机生成二进制编码
boolean() True/False
language_code() 随机生成两位语言编码
locale() 随机生成语言/国际 信息
md5() 随机生成MD5
null_boolean() NULL/True/False
password() 随机生成密码,可选参数:length:密码长度;special_chars:是否能使用特殊字符;digits:是否包含数字;upper_case:是否包含大写字母;lower_case:是否包含小写字母
sha1() 随机SHA1
sha256() 随机SHA256
uuid4() 随机UUID
first_name()
first_name_female() 女性名
first_name_male() 男性名
first_romanized_name() 罗马名
last_name()
last_name_female() 女姓
last_name_male() 男姓
last_romanized_name()
name() 随机生成全名
name_female() 男性全名
name_male() 女性全名
romanized_name() 罗马名
msisdn() 移动台国际用户识别码,即移动用户的ISDN号码
phone_number() 随机生成手机号
phonenumber_prefix() 随机生成手机号段
profile() 随机生成档案信息
simple_profile() 随机生成简单档案信息

4、随机生成指定类型数据

参数 说明
pybool() 布尔类型
pydecimal() 数字
pydict() 字典
pyfloat() left_digits=5 #生成的整数位数, right_digits=2 #生成的小数位数, positive=True #是否只有正数
pyint() 整型
pyiterable() 迭代器
pylist() 列表
pyset() 集合
pystr() 字符串
pystruct() 结构体
pytuple() 元组

5、随机生成常用数据

参数 说明
ssn() 生成身份证号
chrome() 随机生成Chrome的浏览器user_agent信息
firefox() 随机生成FireFox的浏览器user_agent信息
internet_explorer() 随机生成IE的浏览器user_agent信息
opera() 随机生成Opera的浏览器user_agent信息
safari() 随机生成Safari的浏览器user_agent信息
linux_platform_token() 随机Linux信息
user_agent() 随机user_agent信息
……

阅读全文

最近文章

分类

标签

其它