This is an automated email from the ASF dual-hosted git repository.
zrlw pushed a commit to branch 3.3
in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/3.3 by this push:
new ea0976b9cb [3.3] Add dubbo-spring6-security plugin by splitting
dubbo-spring-security (#15494)
ea0976b9cb is described below
commit ea0976b9cbdb5f5e72c4083a32cc9c7e501835b5
Author: zrlw <[email protected]>
AuthorDate: Fri Jun 27 21:57:46 2025 +0800
[3.3] Add dubbo-spring6-security plugin by splitting dubbo-spring-security
(#15494)
* Add dubbo-spring6-security plugin by splitting dubbo-spring-security
* Fix FileTest to support dubbo-spring6-security
* Add dubbo-spring6-security and dubbo-plugin-loom to bom
---
.artifacts | 1 +
dubbo-distribution/dubbo-all-shaded/pom.xml | 23 ++
dubbo-distribution/dubbo-all/pom.xml | 23 ++
dubbo-distribution/dubbo-bom/pom.xml | 12 +
dubbo-plugin/dubbo-spring-security/pom.xml | 15 --
.../spring/security/jackson/ObjectMapperCodec.java | 7 -
.../security/jackson/ObjectMapperCodecTest.java | 2 +-
dubbo-plugin/dubbo-spring6-security/pom.xml | 258 +++++++++++++++++++++
.../oauth2/AuthorizationGrantTypeMixin.java | 0
.../oauth2/BearerTokenAuthenticationMixin.java | 0
.../oauth2/ClientAuthenticationMethodMixin.java | 0
.../security/oauth2/ClientSettingsMixin.java | 0
.../oauth2/OAuth2AuthenticatedPrincipalMixin.java | 0
.../OAuth2ClientAuthenticationTokenMixin.java | 0
.../security/oauth2/OAuth2SecurityModule.java | 0
.../security/oauth2/RegisteredClientMixin.java | 11 +-
.../spring/security/oauth2/TokenSettingsMixin.java | 0
.../oauth2/UnmodifiableCollectionMixin.java | 0
.../jackson/OAuth2ObjectMapperCodecCustomer.java | 39 ++++
...ring.security.jackson.ObjectMapperCodecCustomer | 1 +
.../security/oauth2/DeserializationTest.java | 126 ++++++++++
.../src/test/resources/dubbo-test.xml | 33 +++
.../src/test/resources/log4j2-test.xml | 29 +++
dubbo-test/dubbo-dependencies-all/pom.xml | 5 -
.../java/org/apache/dubbo/dependency/FileTest.java | 2 +
pom.xml | 3 +
26 files changed, 555 insertions(+), 35 deletions(-)
diff --git a/.artifacts b/.artifacts
index 27974610f1..88f77a30cb 100644
--- a/.artifacts
+++ b/.artifacts
@@ -107,6 +107,7 @@ dubbo-zookeeper-curator5-spring-boot-starter
dubbo-sentinel-spring-boot-starter
dubbo-seata-spring-boot-starter
dubbo-spring-security
+dubbo-spring6-security
dubbo-tracing
dubbo-xds
dubbo-plugin-loom
diff --git a/dubbo-distribution/dubbo-all-shaded/pom.xml
b/dubbo-distribution/dubbo-all-shaded/pom.xml
index a945581dda..0c91b206c9 100644
--- a/dubbo-distribution/dubbo-all-shaded/pom.xml
+++ b/dubbo-distribution/dubbo-all-shaded/pom.xml
@@ -513,6 +513,7 @@
<include>org.apache.dubbo:dubbo-security</include>
<include>org.apache.dubbo:dubbo-reactive</include>
<include>org.apache.dubbo:dubbo-spring-security</include>
+ <include>org.apache.dubbo:dubbo-spring6-security</include>
<include>org.apache.dubbo:dubbo-registry-api</include>
<include>org.apache.dubbo:dubbo-registry-multicast</include>
<include>org.apache.dubbo:dubbo-registry-multiple</include>
@@ -989,6 +990,21 @@
</build>
<profiles>
+ <profile>
+ <id>spring6-security</id>
+ <activation>
+ <jdk>[17,)</jdk>
+ </activation>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.dubbo</groupId>
+ <artifactId>dubbo-spring6-security</artifactId>
+ <version>${project.version}</version>
+ <scope>compile</scope>
+ <optional>true</optional>
+ </dependency>
+ </dependencies>
+ </profile>
<profile>
<id>loom</id>
<activation>
@@ -1007,6 +1023,13 @@
<profile>
<id>release</id>
<dependencies>
+ <dependency>
+ <groupId>org.apache.dubbo</groupId>
+ <artifactId>dubbo-spring6-security</artifactId>
+ <version>${project.version}</version>
+ <scope>compile</scope>
+ <optional>true</optional>
+ </dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-plugin-loom</artifactId>
diff --git a/dubbo-distribution/dubbo-all/pom.xml
b/dubbo-distribution/dubbo-all/pom.xml
index 8df563097d..c7c1386271 100644
--- a/dubbo-distribution/dubbo-all/pom.xml
+++ b/dubbo-distribution/dubbo-all/pom.xml
@@ -512,6 +512,7 @@
<include>org.apache.dubbo:dubbo-security</include>
<include>org.apache.dubbo:dubbo-reactive</include>
<include>org.apache.dubbo:dubbo-spring-security</include>
+ <include>org.apache.dubbo:dubbo-spring6-security</include>
<include>org.apache.dubbo:dubbo-registry-api</include>
<include>org.apache.dubbo:dubbo-registry-multicast</include>
<include>org.apache.dubbo:dubbo-registry-multiple</include>
@@ -974,6 +975,21 @@
</build>
<profiles>
+ <profile>
+ <id>spring6-security</id>
+ <activation>
+ <jdk>[17,)</jdk>
+ </activation>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.dubbo</groupId>
+ <artifactId>dubbo-spring6-security</artifactId>
+ <version>${project.version}</version>
+ <scope>compile</scope>
+ <optional>true</optional>
+ </dependency>
+ </dependencies>
+ </profile>
<profile>
<id>loom</id>
<activation>
@@ -992,6 +1008,13 @@
<profile>
<id>release</id>
<dependencies>
+ <dependency>
+ <groupId>org.apache.dubbo</groupId>
+ <artifactId>dubbo-spring6-security</artifactId>
+ <version>${project.version}</version>
+ <scope>compile</scope>
+ <optional>true</optional>
+ </dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-plugin-loom</artifactId>
diff --git a/dubbo-distribution/dubbo-bom/pom.xml
b/dubbo-distribution/dubbo-bom/pom.xml
index fd057752bb..2cdb6b72a4 100644
--- a/dubbo-distribution/dubbo-bom/pom.xml
+++ b/dubbo-distribution/dubbo-bom/pom.xml
@@ -291,6 +291,18 @@
<version>${project.version}</version>
</dependency>
+ <dependency>
+ <groupId>org.apache.dubbo</groupId>
+ <artifactId>dubbo-spring6-security</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.dubbo</groupId>
+ <artifactId>dubbo-plugin-loom</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-rest-jaxrs</artifactId>
diff --git a/dubbo-plugin/dubbo-spring-security/pom.xml
b/dubbo-plugin/dubbo-spring-security/pom.xml
index 514daf508d..68844fc816 100644
--- a/dubbo-plugin/dubbo-spring-security/pom.xml
+++ b/dubbo-plugin/dubbo-spring-security/pom.xml
@@ -29,7 +29,6 @@
<properties>
<skip_maven_deploy>false</skip_maven_deploy>
- <spring.oauth2.server>1.5.1</spring.oauth2.server>
</properties>
<dependencies>
@@ -59,26 +58,12 @@
<artifactId>spring-security-core</artifactId>
</dependency>
- <dependency>
- <groupId>org.springframework.security</groupId>
- <artifactId>spring-security-oauth2-core</artifactId>
- <optional>true</optional>
- </dependency>
-
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-oauth2-client</artifactId>
<scope>test</scope>
<optional>true</optional>
</dependency>
-
- <dependency>
- <groupId>org.springframework.security</groupId>
- <artifactId>spring-security-oauth2-authorization-server</artifactId>
- <version>${spring.oauth2.server}</version>
- <scope>test</scope>
- <optional>true</optional>
- </dependency>
<!-- spring security -->
<!-- jackson -->
diff --git
a/dubbo-plugin/dubbo-spring-security/src/main/java/org/apache/dubbo/spring/security/jackson/ObjectMapperCodec.java
b/dubbo-plugin/dubbo-spring-security/src/main/java/org/apache/dubbo/spring/security/jackson/ObjectMapperCodec.java
index 7c8cb06af8..f85e182e36 100644
---
a/dubbo-plugin/dubbo-spring-security/src/main/java/org/apache/dubbo/spring/security/jackson/ObjectMapperCodec.java
+++
b/dubbo-plugin/dubbo-spring-security/src/main/java/org/apache/dubbo/spring/security/jackson/ObjectMapperCodec.java
@@ -21,19 +21,16 @@ import org.apache.dubbo.common.logger.ErrorTypeAwareLogger;
import org.apache.dubbo.common.logger.LoggerFactory;
import org.apache.dubbo.common.utils.ClassUtils;
import org.apache.dubbo.common.utils.StringUtils;
-import org.apache.dubbo.spring.security.oauth2.OAuth2SecurityModule;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
-import com.fasterxml.jackson.databind.Module;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import org.springframework.security.jackson2.CoreJackson2Module;
-import org.springframework.security.jackson2.SecurityJackson2Modules;
public class ObjectMapperCodec {
@@ -104,10 +101,6 @@ public class ObjectMapperCodec {
private void registerDefaultModule() {
mapper.registerModule(new CoreJackson2Module());
mapper.registerModule(new JavaTimeModule());
- mapper.registerModule(new OAuth2SecurityModule());
- List<Module> securityModules =
-
SecurityJackson2Modules.getModules(this.getClass().getClassLoader());
- mapper.registerModules(securityModules);
List<String> jacksonModuleClassNameList = new ArrayList<>();
jacksonModuleClassNameList.add(
diff --git
a/dubbo-plugin/dubbo-spring-security/src/test/java/org/apache/dubbo/spring/security/jackson/ObjectMapperCodecTest.java
b/dubbo-plugin/dubbo-spring-security/src/test/java/org/apache/dubbo/spring/security/jackson/ObjectMapperCodecTest.java
index ea2d613ec6..bae9af97f9 100644
---
a/dubbo-plugin/dubbo-spring-security/src/test/java/org/apache/dubbo/spring/security/jackson/ObjectMapperCodecTest.java
+++
b/dubbo-plugin/dubbo-spring-security/src/test/java/org/apache/dubbo/spring/security/jackson/ObjectMapperCodecTest.java
@@ -29,7 +29,7 @@ import
org.springframework.security.oauth2.core.OAuth2AccessToken;
public class ObjectMapperCodecTest {
- private ObjectMapperCodec mapper = new ObjectMapperCodec();
+ private final ObjectMapperCodec mapper = new ObjectMapperCodec();
@Test
public void testOAuth2AuthorizedClientCodec() {
diff --git a/dubbo-plugin/dubbo-spring6-security/pom.xml
b/dubbo-plugin/dubbo-spring6-security/pom.xml
new file mode 100644
index 0000000000..73078abf79
--- /dev/null
+++ b/dubbo-plugin/dubbo-spring6-security/pom.xml
@@ -0,0 +1,258 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.dubbo</groupId>
+ <artifactId>dubbo-parent</artifactId>
+ <version>${revision}</version>
+ <relativePath>../../pom.xml</relativePath>
+ </parent>
+
+ <artifactId>dubbo-spring6-security</artifactId>
+ <packaging>jar</packaging>
+
+ <properties>
+ <skip_maven_deploy>false</skip_maven_deploy>
+ <spring.oauth2.server>1.5.1</spring.oauth2.server>
+ </properties>
+
+ <dependencies>
+ <!-- spring6 -->
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-core</artifactId>
+ <version>${spring-6.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-beans</artifactId>
+ <version>${spring-6.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-context</artifactId>
+ <version>${spring-6.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-aop</artifactId>
+ <version>${spring-6.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-web</artifactId>
+ <version>${spring-6.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-jcl</artifactId>
+ <version>${spring-6.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-expression</artifactId>
+ <version>${spring-6.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-test</artifactId>
+ <version>${spring-6.version}</version>
+ <scope>test</scope>
+ <optional>true</optional>
+ </dependency>
+ <!-- spring6 -->
+
+ <!-- dubbo spring security -->
+ <dependency>
+ <groupId>org.apache.dubbo</groupId>
+ <artifactId>dubbo-spring-security</artifactId>
+ <version>${project.version}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>org.springframework.security</groupId>
+ <artifactId>spring-security-core</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <!-- dubbo spring security -->
+
+ <!-- spring6 security -->
+ <dependency>
+ <groupId>org.springframework.security</groupId>
+ <artifactId>spring-security-config</artifactId>
+ <version>${spring-security-6.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework.security</groupId>
+ <artifactId>spring-security-core</artifactId>
+ <version>${spring-security-6.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework.security</groupId>
+ <artifactId>spring-security-web</artifactId>
+ <version>${spring-security-6.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework.security</groupId>
+ <artifactId>spring-security-crypto</artifactId>
+ <version>${spring-security-6.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework.security</groupId>
+ <artifactId>spring-security-oauth2-core</artifactId>
+ <version>${spring-security-6.version}</version>
+ <optional>true</optional>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework.security</groupId>
+ <artifactId>spring-security-oauth2-jose</artifactId>
+ <version>${spring-security-6.version}</version>
+ <optional>true</optional>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework.security</groupId>
+ <artifactId>spring-security-oauth2-resource-server</artifactId>
+ <version>${spring-security-6.version}</version>
+ <optional>true</optional>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework.security</groupId>
+ <artifactId>spring-security-oauth2-authorization-server</artifactId>
+ <version>${spring.oauth2.server}</version>
+ <optional>true</optional>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework.security</groupId>
+ <artifactId>spring-security-oauth2-client</artifactId>
+ <version>${spring-security-6.version}</version>
+ <scope>test</scope>
+ <optional>true</optional>
+ </dependency>
+ <!-- spring security -->
+
+ <!-- spring boot 3 for test -->
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter</artifactId>
+ <version>${spring-boot-3.version}</version>
+ <scope>test</scope>
+ <optional>true</optional>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot</artifactId>
+ <version>${spring-boot-3.version}</version>
+ <scope>test</scope>
+ <optional>true</optional>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-autoconfigure</artifactId>
+ <version>${spring-boot-3.version}</version>
+ <scope>test</scope>
+ <optional>true</optional>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-logging</artifactId>
+ <version>${spring-boot-3.version}</version>
+ <scope>test</scope>
+ <optional>true</optional>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-test</artifactId>
+ <version>${spring-boot-3.version}</version>
+ <scope>test</scope>
+ <optional>true</optional>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-test-autoconfigure</artifactId>
+ <version>${spring-boot-3.version}</version>
+ <scope>test</scope>
+ <optional>true</optional>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-test</artifactId>
+ <version>${spring-boot-3.version}</version>
+ <scope>test</scope>
+ <optional>true</optional>
+ <exclusions>
+ <exclusion>
+ <groupId>ch.qos.logback</groupId>
+ <artifactId>logback-classic</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <!-- spring boot 3 for test -->
+
+ <!-- dubbo-config-spring6 for test -->
+ <dependency>
+ <groupId>org.apache.dubbo</groupId>
+ <artifactId>dubbo-config-spring6</artifactId>
+ <version>${project.parent.version}</version>
+ <scope>test</scope>
+ <optional>true</optional>
+ </dependency>
+ <!-- dubbo-config-spring6 for test -->
+
+ <dependency>
+ <groupId>org.apache.logging.log4j</groupId>
+ <artifactId>log4j-slf4j-impl</artifactId>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <source>17</source>
+ <target>17</target>
+ <release>17</release>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git
a/dubbo-plugin/dubbo-spring-security/src/main/java/org/apache/dubbo/spring/security/oauth2/AuthorizationGrantTypeMixin.java
b/dubbo-plugin/dubbo-spring6-security/src/main/java/org/apache/dubbo/spring/security/oauth2/AuthorizationGrantTypeMixin.java
similarity index 100%
rename from
dubbo-plugin/dubbo-spring-security/src/main/java/org/apache/dubbo/spring/security/oauth2/AuthorizationGrantTypeMixin.java
rename to
dubbo-plugin/dubbo-spring6-security/src/main/java/org/apache/dubbo/spring/security/oauth2/AuthorizationGrantTypeMixin.java
diff --git
a/dubbo-plugin/dubbo-spring-security/src/main/java/org/apache/dubbo/spring/security/oauth2/BearerTokenAuthenticationMixin.java
b/dubbo-plugin/dubbo-spring6-security/src/main/java/org/apache/dubbo/spring/security/oauth2/BearerTokenAuthenticationMixin.java
similarity index 100%
rename from
dubbo-plugin/dubbo-spring-security/src/main/java/org/apache/dubbo/spring/security/oauth2/BearerTokenAuthenticationMixin.java
rename to
dubbo-plugin/dubbo-spring6-security/src/main/java/org/apache/dubbo/spring/security/oauth2/BearerTokenAuthenticationMixin.java
diff --git
a/dubbo-plugin/dubbo-spring-security/src/main/java/org/apache/dubbo/spring/security/oauth2/ClientAuthenticationMethodMixin.java
b/dubbo-plugin/dubbo-spring6-security/src/main/java/org/apache/dubbo/spring/security/oauth2/ClientAuthenticationMethodMixin.java
similarity index 100%
rename from
dubbo-plugin/dubbo-spring-security/src/main/java/org/apache/dubbo/spring/security/oauth2/ClientAuthenticationMethodMixin.java
rename to
dubbo-plugin/dubbo-spring6-security/src/main/java/org/apache/dubbo/spring/security/oauth2/ClientAuthenticationMethodMixin.java
diff --git
a/dubbo-plugin/dubbo-spring-security/src/main/java/org/apache/dubbo/spring/security/oauth2/ClientSettingsMixin.java
b/dubbo-plugin/dubbo-spring6-security/src/main/java/org/apache/dubbo/spring/security/oauth2/ClientSettingsMixin.java
similarity index 100%
rename from
dubbo-plugin/dubbo-spring-security/src/main/java/org/apache/dubbo/spring/security/oauth2/ClientSettingsMixin.java
rename to
dubbo-plugin/dubbo-spring6-security/src/main/java/org/apache/dubbo/spring/security/oauth2/ClientSettingsMixin.java
diff --git
a/dubbo-plugin/dubbo-spring-security/src/main/java/org/apache/dubbo/spring/security/oauth2/OAuth2AuthenticatedPrincipalMixin.java
b/dubbo-plugin/dubbo-spring6-security/src/main/java/org/apache/dubbo/spring/security/oauth2/OAuth2AuthenticatedPrincipalMixin.java
similarity index 100%
rename from
dubbo-plugin/dubbo-spring-security/src/main/java/org/apache/dubbo/spring/security/oauth2/OAuth2AuthenticatedPrincipalMixin.java
rename to
dubbo-plugin/dubbo-spring6-security/src/main/java/org/apache/dubbo/spring/security/oauth2/OAuth2AuthenticatedPrincipalMixin.java
diff --git
a/dubbo-plugin/dubbo-spring-security/src/main/java/org/apache/dubbo/spring/security/oauth2/OAuth2ClientAuthenticationTokenMixin.java
b/dubbo-plugin/dubbo-spring6-security/src/main/java/org/apache/dubbo/spring/security/oauth2/OAuth2ClientAuthenticationTokenMixin.java
similarity index 100%
rename from
dubbo-plugin/dubbo-spring-security/src/main/java/org/apache/dubbo/spring/security/oauth2/OAuth2ClientAuthenticationTokenMixin.java
rename to
dubbo-plugin/dubbo-spring6-security/src/main/java/org/apache/dubbo/spring/security/oauth2/OAuth2ClientAuthenticationTokenMixin.java
diff --git
a/dubbo-plugin/dubbo-spring-security/src/main/java/org/apache/dubbo/spring/security/oauth2/OAuth2SecurityModule.java
b/dubbo-plugin/dubbo-spring6-security/src/main/java/org/apache/dubbo/spring/security/oauth2/OAuth2SecurityModule.java
similarity index 100%
rename from
dubbo-plugin/dubbo-spring-security/src/main/java/org/apache/dubbo/spring/security/oauth2/OAuth2SecurityModule.java
rename to
dubbo-plugin/dubbo-spring6-security/src/main/java/org/apache/dubbo/spring/security/oauth2/OAuth2SecurityModule.java
diff --git
a/dubbo-plugin/dubbo-spring-security/src/main/java/org/apache/dubbo/spring/security/oauth2/RegisteredClientMixin.java
b/dubbo-plugin/dubbo-spring6-security/src/main/java/org/apache/dubbo/spring/security/oauth2/RegisteredClientMixin.java
similarity index 84%
rename from
dubbo-plugin/dubbo-spring-security/src/main/java/org/apache/dubbo/spring/security/oauth2/RegisteredClientMixin.java
rename to
dubbo-plugin/dubbo-spring6-security/src/main/java/org/apache/dubbo/spring/security/oauth2/RegisteredClientMixin.java
index f4977a2220..d8c4e97872 100644
---
a/dubbo-plugin/dubbo-spring-security/src/main/java/org/apache/dubbo/spring/security/oauth2/RegisteredClientMixin.java
+++
b/dubbo-plugin/dubbo-spring6-security/src/main/java/org/apache/dubbo/spring/security/oauth2/RegisteredClientMixin.java
@@ -26,6 +26,8 @@ import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import org.springframework.security.oauth2.core.AuthorizationGrantType;
import org.springframework.security.oauth2.core.ClientAuthenticationMethod;
+import
org.springframework.security.oauth2.server.authorization.settings.ClientSettings;
+import
org.springframework.security.oauth2.server.authorization.settings.TokenSettings;
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS)
@JsonAutoDetect(
@@ -36,11 +38,6 @@ import
org.springframework.security.oauth2.core.ClientAuthenticationMethod;
@JsonIgnoreProperties(ignoreUnknown = true)
abstract class RegisteredClientMixin {
- /**
- * declare clientSettings and tokenSettings as Object type to avoid
COMPILATION ERROR when compile it with jdk8
- * or jdk11, both ClientSettings and TokenSettings class file version are
61.0 which is higher than the version
- * which jdk8 (class file version: 52.0) or jdk11 (class file version:
55.0) could support.
- */
@JsonCreator
public RegisteredClientMixin(
@JsonProperty("id") String id,
@@ -54,6 +51,6 @@ abstract class RegisteredClientMixin {
@JsonProperty("redirectUris") Set<String> redirectUris,
@JsonProperty("postLogoutRedirectUris") Set<String>
postLogoutRedirectUris,
@JsonProperty("scopes") Set<String> scopes,
- @JsonProperty("clientSettings") Object clientSettings,
- @JsonProperty("tokenSettings") Object tokenSettings) {}
+ @JsonProperty("clientSettings") ClientSettings clientSettings,
+ @JsonProperty("tokenSettings") TokenSettings tokenSettings) {}
}
diff --git
a/dubbo-plugin/dubbo-spring-security/src/main/java/org/apache/dubbo/spring/security/oauth2/TokenSettingsMixin.java
b/dubbo-plugin/dubbo-spring6-security/src/main/java/org/apache/dubbo/spring/security/oauth2/TokenSettingsMixin.java
similarity index 100%
rename from
dubbo-plugin/dubbo-spring-security/src/main/java/org/apache/dubbo/spring/security/oauth2/TokenSettingsMixin.java
rename to
dubbo-plugin/dubbo-spring6-security/src/main/java/org/apache/dubbo/spring/security/oauth2/TokenSettingsMixin.java
diff --git
a/dubbo-plugin/dubbo-spring-security/src/main/java/org/apache/dubbo/spring/security/oauth2/UnmodifiableCollectionMixin.java
b/dubbo-plugin/dubbo-spring6-security/src/main/java/org/apache/dubbo/spring/security/oauth2/UnmodifiableCollectionMixin.java
similarity index 100%
rename from
dubbo-plugin/dubbo-spring-security/src/main/java/org/apache/dubbo/spring/security/oauth2/UnmodifiableCollectionMixin.java
rename to
dubbo-plugin/dubbo-spring6-security/src/main/java/org/apache/dubbo/spring/security/oauth2/UnmodifiableCollectionMixin.java
diff --git
a/dubbo-plugin/dubbo-spring6-security/src/main/java/org/apache/dubbo/spring/security/oauth2/jackson/OAuth2ObjectMapperCodecCustomer.java
b/dubbo-plugin/dubbo-spring6-security/src/main/java/org/apache/dubbo/spring/security/oauth2/jackson/OAuth2ObjectMapperCodecCustomer.java
new file mode 100644
index 0000000000..abaaeaf95b
--- /dev/null
+++
b/dubbo-plugin/dubbo-spring6-security/src/main/java/org/apache/dubbo/spring/security/oauth2/jackson/OAuth2ObjectMapperCodecCustomer.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.dubbo.spring.security.oauth2.jackson;
+
+import org.apache.dubbo.spring.security.jackson.ObjectMapperCodec;
+import org.apache.dubbo.spring.security.jackson.ObjectMapperCodecCustomer;
+import org.apache.dubbo.spring.security.oauth2.OAuth2SecurityModule;
+
+import java.util.List;
+
+import com.fasterxml.jackson.databind.Module;
+import org.springframework.security.jackson2.SecurityJackson2Modules;
+
+public class OAuth2ObjectMapperCodecCustomer implements
ObjectMapperCodecCustomer {
+
+ @Override
+ public void customize(ObjectMapperCodec objectMapperCodec) {
+ objectMapperCodec.configureMapper(mapper -> {
+ mapper.registerModule(new OAuth2SecurityModule());
+ List<Module> securityModules =
+
SecurityJackson2Modules.getModules(this.getClass().getClassLoader());
+ mapper.registerModules(securityModules);
+ });
+ }
+}
diff --git
a/dubbo-plugin/dubbo-spring6-security/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.spring.security.jackson.ObjectMapperCodecCustomer
b/dubbo-plugin/dubbo-spring6-security/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.spring.security.jackson.ObjectMapperCodecCustomer
new file mode 100644
index 0000000000..d3fea59891
--- /dev/null
+++
b/dubbo-plugin/dubbo-spring6-security/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.spring.security.jackson.ObjectMapperCodecCustomer
@@ -0,0 +1 @@
+oauth2Customer=org.apache.dubbo.spring.security.oauth2.jackson.OAuth2ObjectMapperCodecCustomer
diff --git
a/dubbo-plugin/dubbo-spring6-security/src/test/java/org/apache/dubbo/spring/security/oauth2/DeserializationTest.java
b/dubbo-plugin/dubbo-spring6-security/src/test/java/org/apache/dubbo/spring/security/oauth2/DeserializationTest.java
new file mode 100644
index 0000000000..e1b59881b2
--- /dev/null
+++
b/dubbo-plugin/dubbo-spring6-security/src/test/java/org/apache/dubbo/spring/security/oauth2/DeserializationTest.java
@@ -0,0 +1,126 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.dubbo.spring.security.oauth2;
+
+import org.apache.dubbo.config.bootstrap.DubboBootstrap;
+import org.apache.dubbo.rpc.model.ApplicationModel;
+import org.apache.dubbo.spring.security.jackson.ObjectMapperCodec;
+
+import java.time.Duration;
+import java.time.Instant;
+import java.util.Collections;
+
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.ImportResource;
+import org.springframework.security.core.authority.SimpleGrantedAuthority;
+import org.springframework.security.oauth2.core.AuthorizationGrantType;
+import org.springframework.security.oauth2.core.ClientAuthenticationMethod;
+import
org.springframework.security.oauth2.core.DefaultOAuth2AuthenticatedPrincipal;
+import org.springframework.security.oauth2.core.OAuth2AccessToken;
+import org.springframework.security.oauth2.core.OAuth2AccessToken.TokenType;
+import
org.springframework.security.oauth2.server.authorization.authentication.OAuth2ClientAuthenticationToken;
+import
org.springframework.security.oauth2.server.authorization.client.RegisteredClient;
+import
org.springframework.security.oauth2.server.authorization.settings.ClientSettings;
+import
org.springframework.security.oauth2.server.authorization.settings.OAuth2TokenFormat;
+import
org.springframework.security.oauth2.server.authorization.settings.TokenSettings;
+import
org.springframework.security.oauth2.server.resource.authentication.BearerTokenAuthentication;
+
+@SpringBootTest(
+ properties = {"dubbo.registry.address=N/A"},
+ classes = {DeserializationTest.class})
+@Configuration
+public class DeserializationTest {
+
+ private static ObjectMapperCodec mapper;
+
+ @BeforeAll
+ public static void beforeAll() {
+ DubboBootstrap.reset();
+ mapper =
ApplicationModel.defaultModel().getDefaultModule().getBean(ObjectMapperCodec.class);
+ }
+
+ @AfterAll
+ public static void afterAll() {
+ DubboBootstrap.reset();
+ }
+
+ @Test
+ public void bearerTokenAuthenticationTest() {
+ BearerTokenAuthentication bearerTokenAuthentication = new
BearerTokenAuthentication(
+ new DefaultOAuth2AuthenticatedPrincipal(
+ "principal-name",
+ Collections.singletonMap("name", "kali"),
+ Collections.singleton(new
SimpleGrantedAuthority("1"))),
+ new OAuth2AccessToken(TokenType.BEARER, "111", Instant.MIN,
Instant.MAX),
+ Collections.emptyList());
+ String content = mapper.serialize(bearerTokenAuthentication);
+
+ BearerTokenAuthentication deserialize =
mapper.deserialize(content.getBytes(), BearerTokenAuthentication.class);
+
+ Assertions.assertNotNull(deserialize);
+ }
+
+ @Test
+ public void oauth2ClientAuthenticationTokenTest() {
+ OAuth2ClientAuthenticationToken oAuth2ClientAuthenticationToken = new
OAuth2ClientAuthenticationToken(
+ "client-id", ClientAuthenticationMethod.CLIENT_SECRET_POST,
"111", Collections.emptyMap());
+
+ String content = mapper.serialize(oAuth2ClientAuthenticationToken);
+
+ OAuth2ClientAuthenticationToken deserialize =
+ mapper.deserialize(content.getBytes(),
OAuth2ClientAuthenticationToken.class);
+
+ Assertions.assertNotNull(deserialize);
+ }
+
+ @Test
+ public void registeredClientTest() {
+ RegisteredClient registeredClient = RegisteredClient.withId("id")
+ .clientId("client-id")
+ .clientName("client-name")
+
.authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE)
+ .redirectUri("https://example.com")
+
.clientAuthenticationMethod(ClientAuthenticationMethod.CLIENT_SECRET_JWT)
+ .clientSecret("client-secret")
+ .clientIdIssuedAt(Instant.MIN)
+ .clientSecretExpiresAt(Instant.MAX)
+ .tokenSettings(TokenSettings.builder()
+ .accessTokenFormat(OAuth2TokenFormat.REFERENCE)
+ .accessTokenTimeToLive(Duration.ofSeconds(1000))
+ .build())
+ .clientSettings(ClientSettings.builder()
+ .setting("name", "value")
+ .requireProofKey(true)
+ .build())
+ .build();
+
+ String content = mapper.serialize(registeredClient);
+
+ RegisteredClient deserialize = mapper.deserialize(content.getBytes(),
RegisteredClient.class);
+
+ Assertions.assertEquals(registeredClient, deserialize);
+ }
+
+ @Configuration
+ @ImportResource("classpath:/dubbo-test.xml")
+ public static class OAuth2SecurityTestConfiguration {}
+}
diff --git
a/dubbo-plugin/dubbo-spring6-security/src/test/resources/dubbo-test.xml
b/dubbo-plugin/dubbo-spring6-security/src/test/resources/dubbo-test.xml
new file mode 100644
index 0000000000..8c39a7b92a
--- /dev/null
+++ b/dubbo-plugin/dubbo-spring6-security/src/test/resources/dubbo-test.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~
+ ~ Licensed to the Apache Software Foundation (ASF) under one or more
+ ~ contributor license agreements. See the NOTICE file distributed with
+ ~ this work for additional information regarding copyright ownership.
+ ~ The ASF licenses this file to You under the Apache License, Version 2.0
+ ~ (the "License"); you may not use this file except in compliance with
+ ~ the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ ~
+ -->
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans
+ http://www.springframework.org/schema/beans/spring-beans.xsd
+ http://code.alibabatech.com/schema/dubbo
+ http://code.alibabatech.com/schema/dubbo/dubbo.xsd"
default-lazy-init ="false">
+
+ <dubbo:application name="oauth2-security-test-app"/>
+
+ <dubbo:registry client="curator" address="${dubbo.registry.address}"/>
+
+ <dubbo:protocol name="dubbo" port="20880"/>
+</beans>
diff --git
a/dubbo-plugin/dubbo-spring6-security/src/test/resources/log4j2-test.xml
b/dubbo-plugin/dubbo-spring6-security/src/test/resources/log4j2-test.xml
new file mode 100644
index 0000000000..ba99f52cc2
--- /dev/null
+++ b/dubbo-plugin/dubbo-spring6-security/src/test/resources/log4j2-test.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one or more
+ ~ contributor license agreements. See the NOTICE file distributed with
+ ~ this work for additional information regarding copyright ownership.
+ ~ The ASF licenses this file to You under the Apache License, Version 2.0
+ ~ (the "License"); you may not use this file except in compliance with
+ ~ the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+<Configuration status="WARN">
+ <Appenders>
+ <Console name="Console" target="SYSTEM_OUT" follow="true">
+ <PatternLayout pattern="%d{HH:mm:ss.SSS} |-%highlight{%-5p} [%t]
%40.40c:%-3L -|
%m%n%rEx{filters(jdk.internal.reflect,java.lang.reflect,sun.reflect,org.junit,org.mockito)}"
charset="UTF-8"/>
+ </Console>
+ </Appenders>
+ <Loggers>
+ <Root level="info">
+ <AppenderRef ref="Console"/>
+ </Root>
+ </Loggers>
+</Configuration>
diff --git a/dubbo-test/dubbo-dependencies-all/pom.xml
b/dubbo-test/dubbo-dependencies-all/pom.xml
index 69889f8f9a..fcdc9b593b 100644
--- a/dubbo-test/dubbo-dependencies-all/pom.xml
+++ b/dubbo-test/dubbo-dependencies-all/pom.xml
@@ -71,11 +71,6 @@
<artifactId>dubbo-config-spring</artifactId>
<version>${project.version}</version>
</dependency>
- <!-- <dependency>-->
- <!-- <groupId>org.apache.dubbo</groupId>-->
- <!-- <artifactId>dubbo-config-spring6</artifactId>-->
- <!-- <version>${project.version}</version>-->
- <!-- </dependency>-->
<!-- config-center -->
<dependency>
diff --git
a/dubbo-test/dubbo-test-modules/src/test/java/org/apache/dubbo/dependency/FileTest.java
b/dubbo-test/dubbo-test-modules/src/test/java/org/apache/dubbo/dependency/FileTest.java
index b7f487faa2..851113e698 100644
---
a/dubbo-test/dubbo-test-modules/src/test/java/org/apache/dubbo/dependency/FileTest.java
+++
b/dubbo-test/dubbo-test-modules/src/test/java/org/apache/dubbo/dependency/FileTest.java
@@ -55,6 +55,7 @@ class FileTest {
ignoredModules.add(Pattern.compile("dubbo-demo.*"));
ignoredModules.add(Pattern.compile("dubbo-annotation-processor"));
ignoredModules.add(Pattern.compile("dubbo-config-spring6"));
+ ignoredModules.add(Pattern.compile("dubbo-spring6-security"));
ignoredModules.add(Pattern.compile("dubbo-spring-boot-3-autoconfigure"));
ignoredModules.add(Pattern.compile("dubbo-plugin-loom.*"));
@@ -74,6 +75,7 @@ class FileTest {
ignoredModulesInDubboAll.add(Pattern.compile(".*spring-boot.*"));
ignoredModulesInDubboAll.add(Pattern.compile("dubbo-maven-plugin"));
+
ignoredModulesInDubboAllShade.add(Pattern.compile("dubbo-spring6-security"));
ignoredModulesInDubboAllShade.add(Pattern.compile("dubbo-plugin-loom"));
}
diff --git a/pom.xml b/pom.xml
index f8507cdf78..f4841d5bfd 100644
--- a/pom.xml
+++ b/pom.xml
@@ -165,6 +165,7 @@
<!-- For unify spring boot 3 version -->
<spring-6.version>6.2.8</spring-6.version>
+ <spring-security-6.version>6.5.1</spring-security-6.version>
<spring-boot-3.version>3.5.0</spring-boot-3.version>
<protobuf-protoc_version>3.22.3</protobuf-protoc_version>
@@ -495,6 +496,7 @@
</activation>
<modules>
<module>dubbo-spring-boot-project/dubbo-spring-boot-3-autoconfigure</module>
+ <module>dubbo-plugin/dubbo-spring6-security</module>
</modules>
</profile>
<!-- jacoco: mvn validate -Pjacoco -->
@@ -644,6 +646,7 @@
<id>release</id>
<modules>
<module>dubbo-spring-boot-project/dubbo-spring-boot-3-autoconfigure</module>
+ <module>dubbo-plugin/dubbo-spring6-security</module>
<module>dubbo-plugin/dubbo-plugin-loom</module>
<module>dubbo-distribution/dubbo-all</module>
<module>dubbo-distribution/dubbo-all-shaded</module>