From c3ef7a4fe6d550a7959720e0d5c624bd2fbbdcc4 Mon Sep 17 00:00:00 2001 From: xiang Date: Sun, 24 Aug 2025 01:04:56 +0800 Subject: [PATCH] =?UTF-8?q?feat:jwt=E6=8E=88=E6=9D=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 11 ++++-- xservice-common/pom.xml | 4 +-- .../xiang/xservice/basic/utils/JwkUtils.java | 35 +++++++++++++++++++ .../service/DynamicRoutingDataSource.java | 9 +++++ 4 files changed, 54 insertions(+), 5 deletions(-) create mode 100644 xservice-common/src/main/java/com/xiang/xservice/basic/utils/JwkUtils.java diff --git a/pom.xml b/pom.xml index f30f2f6..b71ae30 100644 --- a/pom.xml +++ b/pom.xml @@ -75,11 +75,16 @@ ${spring.authorization.server.version} + + org.springframework.boot + spring-boot-starter-oauth2-resource-server + + - com.nimbusds - nimbus-jose-jwt - 9.24.4 + org.springframework.security + spring-security-oauth2-jose + 5.7.11 diff --git a/xservice-common/pom.xml b/xservice-common/pom.xml index b4676bd..6f9d661 100644 --- a/xservice-common/pom.xml +++ b/xservice-common/pom.xml @@ -6,9 +6,9 @@ com.xiang xservice-basic - 1.1 + 2.0-SNAPSHOT - 1.3 + 2.0-SNAPSHOT xservice-common diff --git a/xservice-common/src/main/java/com/xiang/xservice/basic/utils/JwkUtils.java b/xservice-common/src/main/java/com/xiang/xservice/basic/utils/JwkUtils.java new file mode 100644 index 0000000..d2e78c2 --- /dev/null +++ b/xservice-common/src/main/java/com/xiang/xservice/basic/utils/JwkUtils.java @@ -0,0 +1,35 @@ +package com.xiang.xservice.basic.utils; + +import com.nimbusds.jose.jwk.RSAKey; + +import java.security.KeyPair; +import java.security.KeyPairGenerator; +import java.security.interfaces.RSAPrivateKey; +import java.security.interfaces.RSAPublicKey; +import java.util.UUID; + +public class JwkUtils { + + + public static RSAKey generateRsa() { + KeyPair keyPair = generateRsaKey(); + RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic(); + RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate(); + return new RSAKey.Builder(publicKey) + .privateKey(privateKey) + .keyID(UUID.randomUUID().toString()) + .build(); + } + + static KeyPair generateRsaKey() { + KeyPair keyPair; + try { + KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); + keyPairGenerator.initialize(2048); + keyPair = keyPairGenerator.generateKeyPair(); + } catch (Exception ex) { + throw new IllegalStateException(ex); + } + return keyPair; + } +} diff --git a/xservice-mysql-starter/src/main/java/com/xiang/xservice/mysql/service/DynamicRoutingDataSource.java b/xservice-mysql-starter/src/main/java/com/xiang/xservice/mysql/service/DynamicRoutingDataSource.java index ddff2ae..4d5ef61 100644 --- a/xservice-mysql-starter/src/main/java/com/xiang/xservice/mysql/service/DynamicRoutingDataSource.java +++ b/xservice-mysql-starter/src/main/java/com/xiang/xservice/mysql/service/DynamicRoutingDataSource.java @@ -4,9 +4,12 @@ import com.xiang.xservice.basic.utils.SSHManager; import com.xiang.xservice.mysql.config.DynamicDataSourceContext; import com.xiang.xservice.mysql.entity.DataSourceProperty; import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; import com.xiang.xservice.mysql.entity.DynamicDataSourceProperties; +import java.util.Objects; + @RequiredArgsConstructor public class DynamicRoutingDataSource extends AbstractRoutingDataSource { @@ -15,7 +18,13 @@ public class DynamicRoutingDataSource extends AbstractRoutingDataSource { @Override protected Object determineCurrentLookupKey() { String key = DynamicDataSourceContext.get(); + if (StringUtils.isEmpty(key)) { + key = dynamicDataSourceProperties.getPrimary(); + } DataSourceProperty dataSourceProperty = dynamicDataSourceProperties.getDatasource().get(key); + if (Objects.isNull(dataSourceProperty.getSshConnect())) { + return key; + } if (Boolean.TRUE.equals(dataSourceProperty.getSshConnect())) { try { SSHManager.createTunnel(