JoyLau's Blog

JoyLau 的技术学习与思考

背景

我自己在多个系统中都有使用 IDEA, IDEA登录账户的话是支持配置同步的。但是由于每个系统的环境变量配置(JAVA_HOME,MAVEN_HOME,GIT,NODE,…..),文件目录结构,字体,快捷键等等不同,导致一套配置并不能很好的通用,于是我在此记录下我平时的一些配置,忘了的话翻出来看看,马上就能达到我要的配置

字体

  1. UI 菜单字体
  2. 编辑器字体 注意:在 Ubuntu 系统下中文字体显得很难看,这时候设置支持中文的第二字体
  3. 控制台字体

插件

插件我使用的是 IDEA 的自动同步功能,在一台客户端下载过的插件都会自动同步,这个不需担心

编辑器变量颜色

进入设置: File | Settings | Editor | Color Scheme | Language Defaults, 开启 Semantic highlighting 功能

代码改动后目录颜色

File | Settings | Version Control, 开启 show directoris with ….

自动导包优化

File | Settings | Editor | General | Auto Import, 勾选 fly

设置 alt + /

File | Settings | Keymap | main menu | code | completion | basic 设为 alt + /
同时 取消 cyclic expand word 的 快捷键

command + shift + / 块注释冲突

打开 macos 的设置, 键盘 | 快捷键 | App 快捷键 , 取消勾选 所有应用程序的显示帮助菜单

自动提示忽略大小写

File | Settings | Editor | General | Code Completion,将 case sensitive completion 修改为NONE

编辑器设置多Tab页

File | Settings | Editor | General | Editor Tabs 去掉 show tabs in single row

提示 serialVersionUID 的生成

File | Settings | Editor | Inspections | Serialization issues | Serializable class without ’serialVersionUID’

显示内存占用

Preferences | Appearance & Behavior | Appearance | Show memory indicator

显示 Lambda 表达式的小图标

Preferences | Editor | General | Gutter Icons
找到 Lambda 并打上勾

编码时显示参数名的提示

Preferences | Editor | General | Code Completion
找到 Parameter Info
勾选 Show parameter name hints on completion
勾选 Show full method signatures

显示更多的参数名提示

Preferences | Editor | Inlay Hints | Java | Parameter Hints | Show parameters hints for:
勾选出自己想要显示的选项,我全都勾选了

idea64.vmoptions 配置

16G 以上的机器:
-Xms512m
-Xmx1500m
-XX:ReservedCodeCacheSize=500m
-XX:SoftRefLRUPolicyMSPerMB=100
添加编码 :
-Dfile.encoding=UTF-8

idea.properties 配置

控制台打印日志的行数:默认为 1024,不限制的话:
idea.cycle.buffer.size=disabled

Mac OS 下 IDEA 文件位置

配置文件位置: /Users/joylau/Library/Preferences/IntelliJIdea201x.x
索引文件位置: /Users/joylau/Library/Caches/IntelliJIdea201x.x

新版 IDEA 新皮肤代码警告颜色修改

Editor -> Color Scheme -> General -> Errors and Warnings -> Warning 然后将背景色设置为 #5E5339

新版 IDEA 关闭预览和单击打开文件

在左侧 Project 面板,找到右上方的设置按钮, 去除勾选 Enable Preview TabOpen Files with Single Click

新版(2023)IDEA 双击 shift 出现搜索结果慢

取消勾选配置:
Advanced Settings -> Wait for all contributors to finish before showing results

删除以前版本的缓存文件

Help -> Delete Leftover IDE Directories…

IntelliJ IDEA 2023.1.3 color schema 备份文件

更新了 2023.2 后,对编辑器的颜色不是很适应, 这里备份下我在 2023.1.3 下的配置, 后面可以继续使用
IntelliJIDEA.2023.1.3.Color.Schema.Dark.icls

安装步骤

  1. 下载 rpm 包 : 官网: https://www.openoffice.org/download/

  2. 解压,进入 /zh-CN/RPMS/ , 安装 rpm 包: rpm -ivh *.rpm

  3. 安装完成后,生成 desktop-integration 目录,进入,因为我的系统是 centos 的 ,我选择安装 rpm -ivh openoffice4.1.5-redhat-menus-4.1.5-9789.noarch.rpm

  4. 安装完成后,目录在 /opt/openoffice4 下
    启动: /opt/openoffice4/program/soffice -headless -accept="socket,host=0.0.0.0,port=8100;urp;" -nofirststartwizard &

遇到的问题

  1. libXext.so.6: cannot open shared object file: No such file or directory
    解决 : yum install libXext.x86_64

  2. no suitable windowing system found, exiting.
    解决: yum groupinstall "X Window System"

之后再启动,查看监听端口 netstat -lnp |grep 8100
已经可以了。

  1. You would need to have WebStorm and JetBrains IDE Support Chrome extension installed.
    需要安装 JetBrains IDE Support 的 chrome 插件

  2. In the WebStorm menu Run select Edit Configurations…. Then click + and select JavaScript Debug. Paste http://localhost:3000 into the URL field and save the configuration.
    在 Edit Configurations 选项里添加一个 JavaScript Debug 的项目,并且地址写上 http://localhost:3000

Note: the URL may be different if you’ve made adjustments via the HOST or PORT environment variables.
地址根据配置环境而异

  1. Start your app by running npm start, then press ^D on macOS or F9 on Windows and Linux or click the green debug icon to start debugging in WebStorm.
    运行项目,点击 debug 按钮调试项目,注意在页面上开启插件的调试功能,此后就能像调式Java 一样调试 js 代码了。

公司的网络接入是需要 ip 地址和 mac 地址绑定在一起的,笔记接入的 WiFi 没绑定就无法上网,公司那么多电脑不用,就使用他们已经绑定好的 静态 IP 地址和 mac 地址来上网

  1. 随机生成一个全新的MAC网卡地址
1
openssl rand -hex 6 | sed 's/\(..\)/\1:/g; s/.$//'
  1. 断开airport无线网卡连接
1
sudo /System/Library/PrivateFrameworks/Apple80211.framework/Resources/airport -z
  1. 修改 mac 地址
1
sudo ifconfig en0 ether xx:xx:xx:xx:xx:xx

xx:xx:xx:xx:xx:xx =输入你想要修改成的MAC地址来代替。

en0 = 输入你想要修改成的网卡代替。一般 en0 就为无线网卡

  1. 重新打开网络
1
networksetup -detectnewhardware

前言

好久不用 mybatis 了,今天突然遇到了一个时间参数的格式化问题…..
mysql 后台取出的时间格式的字段,传到前台变成了时间戳
一下就想到有一个注解进行格式化
可是半天想不到那个注解怎么写的了,于是一顿查

记下来

以前经常使用的注解,现在都忘了,得记下来

  1. @JsonFormat(pattern=”yyyy-MM-dd HH:mm:ss”,timezone=”GMT+8”) : 后台 Date 类型转时间字符串,注意时区 (后台 -> 前台)
  2. @DateTimeFormat(pattern=”yyyy-MM-dd HH:mm:ss”) :前台时间格式参数转为 javabean 的 Date 类型 (前台 -> 后台)
  3. @JSONField(name=”end_time”, format=”yyyy-MM-dd HH:mm:ss”) : fastjson 专用,定义json 的 key,还有时间的格式化,也可以分别在 get set 方法上注解

前言

一般我们搭建起来的 es 集群都可以通过默认的 9200 端口来进行 API 访问,这在局域网上没有什么大问题,如果说搭建的环境在公网上,这将埋下巨大的隐患,因为任何人都可以操作 API 来进行增删改查,这是多么的恐怖!!

说明

  1. 集群环境: elasticsearch 5.3.0;centos 7.2
  2. 集群公网环境

解决方案

elasticsearch 集群搭建完成后,通过制定的端口都可以访问,但是实际情况中,我们并不想这样。我们可能想只有固定的ip地址才能访问,或者需要用户名、密码才能访问
对于如何控制 Elasticsearch 的安全性,我详细查了下资料,现有如下解决方式

  1. 官方的 x-pack 插件,收费的,一下子就觉得用不了了,截止现在(2018年5月21日16:23:19),有最新消息,在 ElasticON 2018 的开幕主题演讲中,x-pack 负责人在博客宣布将开放 X-Pack的代码,但是现在为止只是第一阶段完成,
    最后在博客中宣布在6.3版本,其中免费的X-Pack功能将包含在Elastic Stack的默认发行版中,所以说现在没戏

  2. 官方推荐的shield插件,再5.x的版本后已经集成到 x-pack里了,版本不适合,不用

  3. elasticsearch-http-basic 插件, 已经不支持 5.x的版本了,没法用

  4. ReadonlyREST : 官网地址: https://readonlyrest.com/download/ elasticsearch 版的插件,是免费的, kibana 的插件是收费的,此法可用

  5. 使用 nginx 的 http-basic,可用

ReadonlyREST 插件的使用

  1. 官网选择 elasticsearch 的版本,填写邮箱地址,收到邮件后下载插件文件
    注意:只能通过官网填写邮箱的方式来进行下载,注意看的话,下载的地址后面有校验参数
  2. 运行 bin/elasticsearch-plugin install file:///tmp/readonlyrest-1.16.19_es5.3.0.zip 安装插件,注意是 file:// 再加上绝对路径
    卸载插件 bin/elasticsearch-plugin remove readonlyrest
  3. 配置文件 readonlyrest.yml,这个比较坑,插件生成好之后,居然不生成 readonlyrest.yml,还需要我们自己配置,还不知道需要配置什么东西,没办法,只能去 github 上查看文档,
    文档地址: https://github.com/beshu-tech/readonlyrest-docs/blob/master/elasticsearch.md
  4. 文档说了很多,我找了半天才找到我需要的配置:
1
2
3
4
5
6
7
readonlyrest:
prompt_for_basic_auth: true

access_control_rules:

- name: "::ADMIN::"
auth_key: admin:12333

此时启动 elasticsearch, 再次访问 localhost:9200 就会弹出输入用户名和密码的窗口,此时输入 admin/12333 即可看到接口信息,请求成功后,在日志里会看到 ALLOWED by { name: ‘::PERSONAL_GRP::’, p。。。 的日志信息。
想要屏蔽这样的日志信息,只需再 auth_key 下面加上配置 verbosity: error 即可。默认为 info

这里吐槽一下,ReadonlyREST 插件的文档是真的难读,可能是国外人和我们的思维方式不一样吧。

至此 ReadonlyREST 插件的使用就完毕了。

nginx http-basic 的使用

利用 nginx 的反向代理,分配一个二级域名来进行使用

  1. 一个二级域名,比如xxxx.joylau.cn
  2. 添加 nginx 的配置文件:/etc/nginx/conf.d/elasticsearch.conf, nginx 会默认读取 /etc/nginx/conf.d/ 目录下的 *.conf的文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
upstream JoyElasticSearch {
server localhost:port weight=1;
}


server {
listen 80;
server_name xxxxx.joylau.cn;

location / {
# 提示信息
auth_basic "请输入账号密码";
# 密码文件,最好写绝对路径
auth_basic_user_file /etc/nginx/conf.d/es-password;
autoindex on;
proxy_pass http://JoyElasticSearch;
}
}

在这里访问 xxxxx.joylau.cn 会被定向到 elasticsearch 的http端口
auth_basic_user_file :指的是密码文件,注意这里写绝对路径,防止出错

  1. 用户名,密码文件 es-password
1
2
# root:123
root:Hx53TyjMWNmLo

这里假设 用户名是root,密码是123(实际上不是123),该加密方式为 httpd 加密,怎么获取明文加密后的密文,这个在网上有很多的在线工具可以直接使用,这里不再赘述

  1. 保存并重新加载配置
1
nginx -s reload

访问 xxxxx.joylau.cn 就会提示输入用户名密码,输入正确即可。

至此,nginx http-basic 就结束了

但是还有一个问题,就是直接访问 host + elasticsearch的端口也是可以访问的,解决这个问题,需要使用 iptables 来进行端口的限制访问。

iptables 限制端口的访问

  1. 禁用防火墙 systemctl stop firewalld

  2. 禁用firewalld服务 systemctl mask firewalld

  3. 安装iptables yum install -y iptables

  4. 开机自启 systemctl enable iptables

  5. 启动 iptables systemctl start iptables

  6. 查看现在的所有规则 iptables -L -n

  7. 清空所有默认规则 iptables -F

  8. 清空所有自定义规则 iptables -X

  9. 添加限制规则 iptables -A INPUT -p tcp --dport 9200 ! -s 127.0.0.1 -j DROP
    这句规则的意思是,除了本机,其他的地址都不允许 访问 9200 端口

  10. 保存:service iptables save

注: 后续想要删除这条规则的话
直接修改 iptables.conf 文件后 service iptables save
或者 iptables -L INPUT --line-numbers 查看所有规则
iptables -D INPUT 1 (注意,这个1是行号,num下面的数字)
保存:service iptables save

这样的话,其他机器就不能访问 elasticsearch 的http 服务的端口了,这能通过 配置好的二级域名来访问

至此配置结束

集群环境下的配置

在多个 elasticsearch 集群环境下,可配置一台机器作为负载均衡的机器,配置

1
2
node.master: false
node.data: false

即可,其他机器的配置 http.enabled: false ,即对外不提供 http 服务
访问的时候只需访问那台负载均衡的节点。

至此,文章结束。

0%