分类 java 中的文章

spring cloud gateway的一些细节注意

前言

spring cloud 2.* 的路由用的是 gateway 方案,不再是 1.* 时代的 zuul 了,不过也带来了新问题,这里整理下近期优化 gateway 的鉴权带来的爬坑记录

1、理解 gateway 与 zuul 比较

SpringCloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。

SpringCloud Gateway 作为 Spring Cloud 生态系统中的网关,目标是替代 Zuul,在Spring Cloud 2.0以上版本中,没有对新版本的Zuul 2.0以上最新高性能版本进行集成,仍然还是使用的Zuul 2.0之前的非Reactor模式的老版本。而为了提升网关的性能,SpringCloud Gateway是基于WebFlux框架实现的,而WebFlux框架底层则使用了高性能的Reactor模式通信框架Netty。

……

阅读全文

springboot cli&springcloud cli简单介绍

前言

尝试了下springboot cli和spring cloud cli 命令,整理了下参数和创建项目的介绍

1、下载

1.1 下载springboot cli安装包

官方介绍:https://docs.spring.io/spring-boot/docs/current/reference/html/getting-started.html#getting-started.system-requirements

注意:

需要核对版本支持的jdk、maven、gradle、springboot版本,不能过于追求最新版本,比如springboot3.0.0.M1就只支持jdk17

……

阅读全文

一些正则小细节-不定期补充

前言

记录日常工作碰到的一些正则小细节

1、group分组

需要通过()把提取的参数圈起来,这样才会产生分组

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
private static String collectMapperId(String value) {
        String result = "";
        String regId = "id=\"(.*?)\"";
        Pattern pattern = Pattern.compile(regId);
        Matcher matcher = pattern.matcher(value);
        if (matcher.find()) {
            result = matcher.group(1);
        }
        return result;
    }

对比如果没有(),是没有分组效果的

……

阅读全文

sdkman的使用

前言

多sdk版本管理工具

1、安装java jdk

1
sdk install java

2、安装指定版本的 java jdk

1
sdk install java 8u131

3、安装本地包

1
sdk install groovy 3.0.0-SNAPSHOT /path/to/groovy-3.0.0-SNAPSHOT

4、移除 java jdk

1
sdk uninstall java 21-graalvm

5、查看当前生效的 java jdk

1
2
3
sdk current java
# 查看所有本地包的当前版本
sdk current

6、查看支持的清单

1
sdk list

7、查看软件的版本

1
sdk list java

8、临时切换版本

1
sdk use java 8.0.232.hs-adpt

9、切换默认版本

1
sdk default java 11.0.5.hs-adpt

10、sdk 版本升级

1
2
3
sdk upgrade springboot
# 本地所有sdk全部升级
sdk upgrade 

11、sdkman 版本升级

1
2
3
sdk selfupdate
# 强制重新安装
sdk selfupdate force

12、查看 sdkman 的版本

1
sdk version

13、离线模式

1
2
3
4
5
sdk offline enable
  Forced offline mode enabled.

sdk offline disable
  Online mode re-enabled!

当电脑没有网的时候,离线模式会进行自动切换.

……

阅读全文

log4j2远程执行漏洞

前言

12月9日爆出来的log4j2远程执行漏洞,因为影响巨大,网上新闻和介绍特别多,这里不多说,间接使用log4j2的第三方也不少,等官网修复不知道是否赶得上,直接采用暴力删除jndilook.class最简单

1、直接删除漏洞class

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#!/bin/bash
set -eu
for JAR_PATH in "$@"; do
	if [[ $JAR_PATH != *log4j-core*.jar ]] || [ -e "$JAR_PATH.bak" ] || ! [ -f "$JAR_PATH" ]; then
		echo "Skipped $JAR_PATH"
		continue
	fi
	echo "Processing $JAR_PATH"
	cp -p "$JAR_PATH" "$JAR_PATH.bak"
	zip -q -d "$JAR_PATH" org/apache/logging/log4j/core/lookup/JndiLookup.class
done

2、Apache log4j2漏洞官方说明

官方漏洞说明: https://logging.apache.org/log4j/2.x/security.html

……

阅读全文

lombok一些注解的含义

前言

lombok一些注解的含义整理

1、@Accessors(chain = true)

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

2、@Data

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

……

阅读全文

caffeine和springcache

前言

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

缓存

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

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

……

阅读全文

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数据有些慢

……

阅读全文

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、等待分析结果

……

阅读全文

最近文章

分类

标签

其它