This commit is contained in:
Eric
2026-02-11 11:04:23 +08:00
parent cdf731a052
commit 0495cb488e
812 changed files with 5138 additions and 1979 deletions

2
demo/backend/demo/.gitattributes vendored Normal file
View File

@@ -0,0 +1,2 @@
/mvnw text eol=lf
*.cmd text eol=crlf

33
demo/backend/demo/.gitignore vendored Normal file
View File

@@ -0,0 +1,33 @@
HELP.md
target/
.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/

63
demo/backend/demo/pom.xml Normal file
View File

@@ -0,0 +1,63 @@
<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.5.10</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>org.lingniu</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>demo</description>
<url/>
<licenses>
<license/>
</licenses>
<developers>
<developer/>
</developers>
<scm>
<connection/>
<developerConnection/>
<tag/>
<url/>
</scm>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.lingniu</groupId>
<artifactId>oauth2-login-sdk</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>

View File

@@ -0,0 +1,13 @@
package org.lingniu.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication(scanBasePackages = {"org.lingniu.**"})
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}

View File

@@ -0,0 +1,29 @@
package org.lingniu.example.demo.controller;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.lingniu.sdk.model.base.CommonResult;
import org.lingniu.sdk.model.user.UserInfo;
import org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ClientProperties;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/test")
@RestController
public class DemoController {
private final OAuth2ClientProperties oAuth2ClientProperties;
private final ObjectMapper objectMapper;
public DemoController(OAuth2ClientProperties oAuth2ClientProperties, ObjectMapper objectMapper) {
this.oAuth2ClientProperties = oAuth2ClientProperties;
this.objectMapper = objectMapper;
}
@GetMapping("/getUserInfo")
public CommonResult<UserInfo> getUserInfo(@AuthenticationPrincipal UserInfo userInfo) throws Exception {
return CommonResult.success(userInfo);
}
}

View File

@@ -0,0 +1,47 @@
# @no-redirect
GET localhost:10001/oauth2/authorization/demo
###
POST http://localhost:8000/oauth2/authorize
Content-Type: application/x-www-form-urlencoded
Accept: application/json
Idp: 387cec08371f4ebfb61074d41a94046e
Cookie: idp_refresh_token=7bb21a0dcac94aec99f08ae6a2d6db30
response_type=code&client_id=b55c88c20db94790a60a5075&scope=openid%20profile%20perms&state=MK1s_JKXsVowOsaGIGK3UK00yVgjUM-lgV-T7tOZdIQ%3D&redirect_uri=http://localhost:9506/oauth2/callback&nonce=rXdsOr0tczTckUSP_RKZ5ABmP575Z4JrTLOxCQ1nt3U
####
GET http://localhost:10001/login/oauth2/code/demo?code=ua3zRRX2YMHsGmYaY4CGEvtklZbCzNtT5sOjguXzhY68zoKqnA83NlQXtG1dN-X_mv4Sn5MaYERkymxk9EWJzpHA_RB523keRb25jmIt5LgUjWJtwD4gJmQJulPOXFO1&state=MK1s_JKXsVowOsaGIGK3UK00yVgjUM-lgV-T7tOZdIQ%3D
###
GET http://localhost:10001/idp/routes
#Authorization: 85a9f4d6fef34763b4437830ec331570
Authorization: Bearer eyJraWQiOiJpZHAiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJhZG1pbiIsImF1ZCI6ImI1NWM4OGMyMGRiOTQ3OTBhNjBhNTA3NSIsIm5iZiI6MTc3MDM5MjMwMiwic2NvcGUiOlsib3BlbmlkIiwicHJvZmlsZSIsInBlcm1zIl0sImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6ODAwMCIsImV4cCI6MTc3MDQzNTUwMiwiaWF0IjoxNzcwMzkyMzAyLCJqdGkiOiIxMmRjZjZmOS0zMjNhLTRhMmUtYjI4Ni1lNDcyOTFhNjc4YTYifQ.MC2khfn7Q2PeU5NB9BCazj-4oWsS_9VIoRLvVZfRiM4RKyAw6VkBv0bNWNuIcUAzZ7GpfIsGMufjsDiVgj7tBK_MWweasWz7DRDc_QCkFt8RZxK2LjxZAilFmXZOaydUNnlGgBmI6S-xAD5N5ltx8OTEdWHuD7tm7S8ppXlvTCk4QSeNd3UYXyXPkR408HOk5ZWTH4PudGVJN5q5gDUAbM9FyN7NejGuJQ4gmHuur7oDhMEqmBQjiv6OnJZko6GszOcN0-nkRJX-KzXV45uIkEF9BaUhJvC6EhotqioVXLuLznX3yB9iuFGqekpS3uHOYwzZF0CHR6xTHg29hvLOxw
#Cookie: app_refresh_token=ce08d9a6b3064311ac163a7806b811ef
###
GET http://localhost:8000/account/getRouters
#Authorization: 85a9f4d6fef34763b4437830ec331570
Authorization: Bearer eyJraWQiOiJpZHAiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJhZG1pbiIsImF1ZCI6ImI1NWM4OGMyMGRiOTQ3OTBhNjBhNTA3NSIsIm5iZiI6MTc3MDM5MjMwMiwic2NvcGUiOlsib3BlbmlkIiwicHJvZmlsZSIsInBlcm1zIl0sImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6ODAwMCIsImV4cCI6MTc3MDQzNTUwMiwiaWF0IjoxNzcwMzkyMzAyLCJqdGkiOiIxMmRjZjZmOS0zMjNhLTRhMmUtYjI4Ni1lNDcyOTFhNjc4YTYifQ.MC2khfn7Q2PeU5NB9BCazj-4oWsS_9VIoRLvVZfRiM4RKyAw6VkBv0bNWNuIcUAzZ7GpfIsGMufjsDiVgj7tBK_MWweasWz7DRDc_QCkFt8RZxK2LjxZAilFmXZOaydUNnlGgBmI6S-xAD5N5ltx8OTEdWHuD7tm7S8ppXlvTCk4QSeNd3UYXyXPkR408HOk5ZWTH4PudGVJN5q5gDUAbM9FyN7NejGuJQ4gmHuur7oDhMEqmBQjiv6OnJZko6GszOcN0-nkRJX-KzXV45uIkEF9BaUhJvC6EhotqioVXLuLznX3yB9iuFGqekpS3uHOYwzZF0CHR6xTHg29hvLOxw
#Cookie: app_refresh_token=ce08d9a6b3064311ac163a7806b811ef
Accept: application/json
####
GET http://localhost:10001/idp/routes
#Authorization: 85a9f4d6fef34763b4437830ec331570
Authorization: 41deb286d03b42139bc3559cbbcc9995
#Cookie: app_refresh_token=ce08d9a6b3064311ac163a7806b811ef
Accept: application/json
###
POST http://localhost:10001/logout
Cookie: app_refresh_token=02237ce2c5d14e8088be3d462b69df99
http://106.14.217.120/portal-api/authorization/demo

View File

@@ -0,0 +1,50 @@
# @no-redirect
GET http://106.14.217.120/portal-api/oauth2/authorization/portal
###
GET localhost:8080
###
POST http://localhost:8000/oauth2/authorize
Content-Type: application/x-www-form-urlencoded
Accept: application/json
Idp: 387cec08371f4ebfb61074d41a94046e
Cookie: idp_refresh_token=7bb21a0dcac94aec99f08ae6a2d6db30
response_type=code&client_id=b55c88c20db94790a60a5075&scope=openid%20profile%20perms&state=MK1s_JKXsVowOsaGIGK3UK00yVgjUM-lgV-T7tOZdIQ%3D&redirect_uri=http://localhost:9506/oauth2/callback&nonce=rXdsOr0tczTckUSP_RKZ5ABmP575Z4JrTLOxCQ1nt3U
####
GET http://localhost:8080/login/oauth2/code/portal?code=ua3zRRX2YMHsGmYaY4CGEvtklZbCzNtT5sOjguXzhY68zoKqnA83NlQXtG1dN-X_mv4Sn5MaYERkymxk9EWJzpHA_RB523keRb25jmIt5LgUjWJtwD4gJmQJulPOXFO1&state=MK1s_JKXsVowOsaGIGK3UK00yVgjUM-lgV-T7tOZdIQ%3D
###
GET http://localhost:10001/idp/routes
#Authorization: 85a9f4d6fef34763b4437830ec331570
Authorization: Bearer eyJraWQiOiJpZHAiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJhZG1pbiIsImF1ZCI6ImI1NWM4OGMyMGRiOTQ3OTBhNjBhNTA3NSIsIm5iZiI6MTc3MDM5MjMwMiwic2NvcGUiOlsib3BlbmlkIiwicHJvZmlsZSIsInBlcm1zIl0sImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6ODAwMCIsImV4cCI6MTc3MDQzNTUwMiwiaWF0IjoxNzcwMzkyMzAyLCJqdGkiOiIxMmRjZjZmOS0zMjNhLTRhMmUtYjI4Ni1lNDcyOTFhNjc4YTYifQ.MC2khfn7Q2PeU5NB9BCazj-4oWsS_9VIoRLvVZfRiM4RKyAw6VkBv0bNWNuIcUAzZ7GpfIsGMufjsDiVgj7tBK_MWweasWz7DRDc_QCkFt8RZxK2LjxZAilFmXZOaydUNnlGgBmI6S-xAD5N5ltx8OTEdWHuD7tm7S8ppXlvTCk4QSeNd3UYXyXPkR408HOk5ZWTH4PudGVJN5q5gDUAbM9FyN7NejGuJQ4gmHuur7oDhMEqmBQjiv6OnJZko6GszOcN0-nkRJX-KzXV45uIkEF9BaUhJvC6EhotqioVXLuLznX3yB9iuFGqekpS3uHOYwzZF0CHR6xTHg29hvLOxw
#Cookie: app_refresh_token=ce08d9a6b3064311ac163a7806b811ef
###
GET http://localhost:8000/account/getRouters
#Authorization: 85a9f4d6fef34763b4437830ec331570
Authorization: Bearer eyJraWQiOiJpZHAiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJhZG1pbiIsImF1ZCI6ImI1NWM4OGMyMGRiOTQ3OTBhNjBhNTA3NSIsIm5iZiI6MTc3MDM5MjMwMiwic2NvcGUiOlsib3BlbmlkIiwicHJvZmlsZSIsInBlcm1zIl0sImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6ODAwMCIsImV4cCI6MTc3MDQzNTUwMiwiaWF0IjoxNzcwMzkyMzAyLCJqdGkiOiIxMmRjZjZmOS0zMjNhLTRhMmUtYjI4Ni1lNDcyOTFhNjc4YTYifQ.MC2khfn7Q2PeU5NB9BCazj-4oWsS_9VIoRLvVZfRiM4RKyAw6VkBv0bNWNuIcUAzZ7GpfIsGMufjsDiVgj7tBK_MWweasWz7DRDc_QCkFt8RZxK2LjxZAilFmXZOaydUNnlGgBmI6S-xAD5N5ltx8OTEdWHuD7tm7S8ppXlvTCk4QSeNd3UYXyXPkR408HOk5ZWTH4PudGVJN5q5gDUAbM9FyN7NejGuJQ4gmHuur7oDhMEqmBQjiv6OnJZko6GszOcN0-nkRJX-KzXV45uIkEF9BaUhJvC6EhotqioVXLuLznX3yB9iuFGqekpS3uHOYwzZF0CHR6xTHg29hvLOxw
#Cookie: app_refresh_token=ce08d9a6b3064311ac163a7806b811ef
Accept: application/json
####
GET http://localhost:10001/idp/routes
#Authorization: 85a9f4d6fef34763b4437830ec331570
Authorization: 41deb286d03b42139bc3559cbbcc9995
#Cookie: app_refresh_token=ce08d9a6b3064311ac163a7806b811ef
Accept: application/json
###
POST http://localhost:10001/logout
Cookie: app_refresh_token=02237ce2c5d14e8088be3d462b69df99

View File

@@ -0,0 +1,70 @@
spring:
application:
name: demo
# redis \u914D\u7F6E
security:
oauth2:
resourceserver:
jwt:
jwk-set-uri: http://localhost:8000/oauth2/jwks
client:
registration:
demo:
client-id: b55c88c20db94790a60a5075
client-secret: UqVAS8UiehSFJSR8_CygnYGR5M79LuGuGiDwATtcGqg
client-name: DEMO
authorization-grant-type: authorization_code
redirect-uri: http://localhost:9506/oauth2/callback
scope:
- openid
- profile
# 返回权限
- perms
provider: idp
provider:
idp:
# issuer-uri: http://localhost:8000
authorization-uri: http://localhost/sso
token-uri: http://localhost:8000/oauth2/token
user-info-uri: http://localhost:8000/userinfo
jwk-set-uri: http://localhost:8000/oauth2/jwks
user-name-attribute: sub
data:
redis:
# \u5730\u5740
host: localhost
# \u7AEF\u53E3\uFF0C\u9ED8\u8BA4\u4E3A6379
port: 6379
# \u6570\u636E\u5E93\u7D22\u5F15
database: 0
# \u5BC6\u7801
password:
# \u8FDE\u63A5\u8D85\u65F6\u65F6\u95F4
timeout: 10s
lettuce:
pool:
# \u8FDE\u63A5\u6C60\u4E2D\u7684\u6700\u5C0F\u7A7A\u95F2\u8FDE\u63A5
min-idle: 0
# \u8FDE\u63A5\u6C60\u4E2D\u7684\u6700\u5927\u7A7A\u95F2\u8FDE\u63A5
max-idle: 8
# \u8FDE\u63A5\u6C60\u7684\u6700\u5927\u6570\u636E\u5E93\u8FDE\u63A5\u6570
max-active: 8
# #\u8FDE\u63A5\u6C60\u6700\u5927\u963B\u585E\u7B49\u5F85\u65F6\u95F4\uFF08\u4F7F\u7528\u8D1F\u503C\u8868\u793A\u6CA1\u6709\u9650\u5236\uFF09
max-wait: -1ms
logging:
level:
root: info
org.springframework.web: debug
org.springframework.security: debug
org.springframework.security.oauth2: debug
server:
port: 10001

View File

@@ -0,0 +1,70 @@
spring:
application:
name: demo
# redis \u914D\u7F6E
security:
oauth2:
resourceserver:
jwt:
jwk-set-uri: http://127.0.0.1:8082/oauth2/jwks
client:
registration:
demo:
client-id: b55c88c20db94790a60a5075
client-secret: UqVAS8UiehSFJSR8_CygnYGR5M79LuGuGiDwATtcGqg
client-name: DEMO
authorization-grant-type: authorization_code
redirect-uri: http://106.14.217.120/demo/callback
scope:
- openid
- profile
# 返回权限
- perms
provider: idp
provider:
idp:
issuer-uri: http://127.0.0.1:8082
authorization-uri: http://106.14.217.120/idp-ui/sso
token-uri: http://127.0.0.1:8082/oauth2/token
user-info-uri: http://127.0.0.1:8082/userinfo
jwk-set-uri: http://127.0.0.1:8082/oauth2/jwks
user-name-attribute: sub
data:
redis:
# \u5730\u5740
host: localhost
# \u7AEF\u53E3\uFF0C\u9ED8\u8BA4\u4E3A6379
port: 6379
# \u6570\u636E\u5E93\u7D22\u5F15
database: 0
# \u5BC6\u7801
password:
# \u8FDE\u63A5\u8D85\u65F6\u65F6\u95F4
timeout: 10s
lettuce:
pool:
# \u8FDE\u63A5\u6C60\u4E2D\u7684\u6700\u5C0F\u7A7A\u95F2\u8FDE\u63A5
min-idle: 0
# \u8FDE\u63A5\u6C60\u4E2D\u7684\u6700\u5927\u7A7A\u95F2\u8FDE\u63A5
max-idle: 8
# \u8FDE\u63A5\u6C60\u7684\u6700\u5927\u6570\u636E\u5E93\u8FDE\u63A5\u6570
max-active: 8
# #\u8FDE\u63A5\u6C60\u6700\u5927\u963B\u585E\u7B49\u5F85\u65F6\u95F4\uFF08\u4F7F\u7528\u8D1F\u503C\u8868\u793A\u6CA1\u6709\u9650\u5236\uFF09
max-wait: -1ms
logging:
level:
root: info
org.springframework.web: debug
org.springframework.security: debug
org.springframework.security.oauth2: debug
server:
port: 10001

View File

@@ -0,0 +1,3 @@
spring:
profiles:
active: dev

View File

@@ -0,0 +1,13 @@
package org.lingniu.example.demo;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class DemoApplicationTests {
@Test
void contextLoads() {
}
}