...
 
Commits (5)
    https://gitcode.net/u013737132/youlai-mall/-/commit/aa4ca98a04cee4f4e2d2ef42750c3dd01902b41f chore(oauth2_server.sql): 更细 oauth2 client 的 grant_type 2024-03-23T15:22:59+08:00 hxr 1490493387@qq.com https://gitcode.net/u013737132/youlai-mall/-/commit/b784dca0212fac6e5adf988ce175969b47c2fc0d chore(pom.xml): 更新项目版本号至 `3.2.1` 2024-03-23T15:24:08+08:00 hxr 1490493387@qq.com https://gitcode.net/u013737132/youlai-mall/-/commit/888ab6e61e815b92a740f5dbf0c46e9f19104779 chore(bootstrap-prod.yml): 更新 prod 环境 nacos 的命名空间 2024-03-23T16:17:48+08:00 hxr 1490493387@qq.com https://gitcode.net/u013737132/youlai-mall/-/commit/09359627a0f1f9aa2f6d95070c021a36dd612efb build(Dockerfile): 更新构建镜像jdk8 → jdk17 2024-03-23T16:18:47+08:00 hxr 1490493387@qq.com https://gitcode.net/u013737132/youlai-mall/-/commit/a1c68b15dcf4c9936704ef066207eae653e9f352 refactor: 优化oauth2授权扩展 2024-03-23T16:21:23+08:00 hxr 1490493387@qq.com
......@@ -82,7 +82,7 @@ CREATE TABLE oauth2_registered_client (
-- ----------------------------
-- Records of oauth2_registered_client
-- ----------------------------
INSERT INTO `oauth2_registered_client` VALUES ('0d2eb3c4-bab5-4973-a64e-2c5c3898e249', 'mall-app',now(), '{bcrypt}$2a$10$OqbaoJTZyCnnBLhtaAKumONuMuwfigqRzjicx4B2Lqy3YsgTBF9Hq', NULL, '商城APP客户端', 'client_secret_basic', 'refresh_token,client_credentials,authorization_code,sms,wx_mini_app', 'http://127.0.0.1:8080/authorized', 'http://127.0.0.1:8080/logged-out', 'openid,profile', '{\"@class\":\"java.util.Collections$UnmodifiableMap\",\"settings.client.require-proof-key\":false,\"settings.client.require-authorization-consent\":true}', '{\"@class\":\"java.util.Collections$UnmodifiableMap\",\"settings.token.reuse-refresh-tokens\":true,\"settings.token.id-token-signature-algorithm\":[\"org.springframework.security.oauth2.jose.jws.SignatureAlgorithm\",\"RS256\"],\"settings.token.access-token-time-to-live\":[\"java.time.Duration\",86400.000000000],\"settings.token.access-token-format\":{\"@class\":\"org.springframework.security.oauth2.server.authorization.settings.OAuth2TokenFormat\",\"value\":\"self-contained\"},\"settings.token.refresh-token-time-to-live\":[\"java.time.Duration\",3600.000000000],\"settings.token.authorization-code-time-to-live\":[\"java.time.Duration\",300.000000000],\"settings.token.device-code-time-to-live\":[\"java.time.Duration\",300.000000000]}');
INSERT INTO `oauth2_registered_client` VALUES ('0d2eb3c4-bab5-4973-a64e-2c5c3898e249', 'mall-app',now(), '{bcrypt}$2a$10$OqbaoJTZyCnnBLhtaAKumONuMuwfigqRzjicx4B2Lqy3YsgTBF9Hq', NULL, '商城APP客户端', 'client_secret_basic', 'refresh_token,client_credentials,authorization_code,sms_code,wechat', 'http://127.0.0.1:8080/authorized', 'http://127.0.0.1:8080/logged-out', 'openid,profile', '{\"@class\":\"java.util.Collections$UnmodifiableMap\",\"settings.client.require-proof-key\":false,\"settings.client.require-authorization-consent\":true}', '{\"@class\":\"java.util.Collections$UnmodifiableMap\",\"settings.token.reuse-refresh-tokens\":true,\"settings.token.id-token-signature-algorithm\":[\"org.springframework.security.oauth2.jose.jws.SignatureAlgorithm\",\"RS256\"],\"settings.token.access-token-time-to-live\":[\"java.time.Duration\",86400.000000000],\"settings.token.access-token-format\":{\"@class\":\"org.springframework.security.oauth2.server.authorization.settings.OAuth2TokenFormat\",\"value\":\"self-contained\"},\"settings.token.refresh-token-time-to-live\":[\"java.time.Duration\",3600.000000000],\"settings.token.authorization-code-time-to-live\":[\"java.time.Duration\",300.000000000],\"settings.token.device-code-time-to-live\":[\"java.time.Duration\",300.000000000]}');
INSERT INTO `oauth2_registered_client` VALUES ('94aa75c2-1c00-44d5-a1ff-edb18f8ad9c4', 'mall-admin', now(), '{bcrypt}$2a$10$9klpwOFEl1zeWlATOYNFYeHoWuDsb160od86/cJrJG8Ik.7fQNOaC', NULL, '商城管理客户端', 'client_secret_basic', 'refresh_token,client_credentials,password,captcha,authorization_code', 'http://127.0.0.1:8080/authorized', 'http://127.0.0.1:8080/logged-out', 'openid,profile', '{\"@class\":\"java.util.Collections$UnmodifiableMap\",\"settings.client.require-proof-key\":false,\"settings.client.require-authorization-consent\":true}', '{\"@class\":\"java.util.Collections$UnmodifiableMap\",\"settings.token.reuse-refresh-tokens\":true,\"settings.token.id-token-signature-algorithm\":[\"org.springframework.security.oauth2.jose.jws.SignatureAlgorithm\",\"RS256\"],\"settings.token.access-token-time-to-live\":[\"java.time.Duration\",86400.000000000],\"settings.token.access-token-format\":{\"@class\":\"org.springframework.security.oauth2.server.authorization.settings.OAuth2TokenFormat\",\"value\":\"self-contained\"},\"settings.token.refresh-token-time-to-live\":[\"java.time.Duration\",3600.000000000],\"settings.token.authorization-code-time-to-live\":[\"java.time.Duration\",300.000000000],\"settings.token.device-code-time-to-live\":[\"java.time.Duration\",300.000000000]}');
INSERT INTO `oauth2_registered_client` VALUES ('94aa75c2-1c00-44d5-a1ff-edb18f8ad9c5', 'client', now(), '{bcrypt}$2a$10$T2Z9XX60zjBS0pwXZmqe1.uEf6OJiPEUhGKZg5b0SnZPwtvlxESJ2', NULL, '商城管理客户端', 'client_secret_basic', 'refresh_token,client_credentials,password,captcha,authorization_code', 'http://127.0.0.1:8080/authorized', 'http://127.0.0.1:8080/logged-out', 'openid,profile', '{\"@class\":\"java.util.Collections$UnmodifiableMap\",\"settings.client.require-proof-key\":false,\"settings.client.require-authorization-consent\":true}', '{\"@class\":\"java.util.Collections$UnmodifiableMap\",\"settings.token.reuse-refresh-tokens\":true,\"settings.token.id-token-signature-algorithm\":[\"org.springframework.security.oauth2.jose.jws.SignatureAlgorithm\",\"RS256\"],\"settings.token.access-token-time-to-live\":[\"java.time.Duration\",86400.000000000],\"settings.token.access-token-format\":{\"@class\":\"org.springframework.security.oauth2.server.authorization.settings.OAuth2TokenFormat\",\"value\":\"self-contained\"},\"settings.token.refresh-token-time-to-live\":[\"java.time.Duration\",3600.000000000],\"settings.token.authorization-code-time-to-live\":[\"java.time.Duration\",300.000000000],\"settings.token.device-code-time-to-live\":[\"java.time.Duration\",300.000000000]}');
......@@ -77,6 +77,6 @@ CREATE TABLE oauth2_registered_client (
-- ----------------------------
-- Records of oauth2_registered_client
-- ----------------------------
INSERT INTO `oauth2_registered_client` VALUES ('0d2eb3c4-bab5-4973-a64e-2c5c3898e249', 'mall-app',now(), '{bcrypt}$2a$10$OqbaoJTZyCnnBLhtaAKumONuMuwfigqRzjicx4B2Lqy3YsgTBF9Hq', NULL, '商城APP客户端', 'client_secret_basic', 'refresh_token,client_credentials,authorization_code,sms,wx_mini_app', 'http://127.0.0.1:8080/authorized', 'http://127.0.0.1:8080/logged-out', 'openid,profile', '{\"@class\":\"java.util.Collections$UnmodifiableMap\",\"settings.client.require-proof-key\":false,\"settings.client.require-authorization-consent\":true}', '{\"@class\":\"java.util.Collections$UnmodifiableMap\",\"settings.token.reuse-refresh-tokens\":true,\"settings.token.id-token-signature-algorithm\":[\"org.springframework.security.oauth2.jose.jws.SignatureAlgorithm\",\"RS256\"],\"settings.token.access-token-time-to-live\":[\"java.time.Duration\",86400.000000000],\"settings.token.access-token-format\":{\"@class\":\"org.springframework.security.oauth2.server.authorization.settings.OAuth2TokenFormat\",\"value\":\"self-contained\"},\"settings.token.refresh-token-time-to-live\":[\"java.time.Duration\",3600.000000000],\"settings.token.authorization-code-time-to-live\":[\"java.time.Duration\",300.000000000],\"settings.token.device-code-time-to-live\":[\"java.time.Duration\",300.000000000]}');
INSERT INTO `oauth2_registered_client` VALUES ('0d2eb3c4-bab5-4973-a64e-2c5c3898e249', 'mall-app',now(), '{bcrypt}$2a$10$OqbaoJTZyCnnBLhtaAKumONuMuwfigqRzjicx4B2Lqy3YsgTBF9Hq', NULL, '商城APP客户端', 'client_secret_basic', 'refresh_token,client_credentials,authorization_code,sms_code,wechat', 'http://127.0.0.1:8080/authorized', 'http://127.0.0.1:8080/logged-out', 'openid,profile', '{\"@class\":\"java.util.Collections$UnmodifiableMap\",\"settings.client.require-proof-key\":false,\"settings.client.require-authorization-consent\":true}', '{\"@class\":\"java.util.Collections$UnmodifiableMap\",\"settings.token.reuse-refresh-tokens\":true,\"settings.token.id-token-signature-algorithm\":[\"org.springframework.security.oauth2.jose.jws.SignatureAlgorithm\",\"RS256\"],\"settings.token.access-token-time-to-live\":[\"java.time.Duration\",86400.000000000],\"settings.token.access-token-format\":{\"@class\":\"org.springframework.security.oauth2.server.authorization.settings.OAuth2TokenFormat\",\"value\":\"self-contained\"},\"settings.token.refresh-token-time-to-live\":[\"java.time.Duration\",3600.000000000],\"settings.token.authorization-code-time-to-live\":[\"java.time.Duration\",300.000000000],\"settings.token.device-code-time-to-live\":[\"java.time.Duration\",300.000000000]}');
INSERT INTO `oauth2_registered_client` VALUES ('94aa75c2-1c00-44d5-a1ff-edb18f8ad9c4', 'mall-admin', now(), '{bcrypt}$2a$10$9klpwOFEl1zeWlATOYNFYeHoWuDsb160od86/cJrJG8Ik.7fQNOaC', NULL, '商城管理客户端', 'client_secret_basic', 'refresh_token,client_credentials,password,captcha,authorization_code', 'http://127.0.0.1:8080/authorized', 'http://127.0.0.1:8080/logged-out', 'openid,profile', '{\"@class\":\"java.util.Collections$UnmodifiableMap\",\"settings.client.require-proof-key\":false,\"settings.client.require-authorization-consent\":true}', '{\"@class\":\"java.util.Collections$UnmodifiableMap\",\"settings.token.reuse-refresh-tokens\":true,\"settings.token.id-token-signature-algorithm\":[\"org.springframework.security.oauth2.jose.jws.SignatureAlgorithm\",\"RS256\"],\"settings.token.access-token-time-to-live\":[\"java.time.Duration\",86400.000000000],\"settings.token.access-token-format\":{\"@class\":\"org.springframework.security.oauth2.server.authorization.settings.OAuth2TokenFormat\",\"value\":\"self-contained\"},\"settings.token.refresh-token-time-to-live\":[\"java.time.Duration\",3600.000000000],\"settings.token.authorization-code-time-to-live\":[\"java.time.Duration\",300.000000000],\"settings.token.device-code-time-to-live\":[\"java.time.Duration\",300.000000000]}');
INSERT INTO `oauth2_registered_client` VALUES ('94aa75c2-1c00-44d5-a1ff-edb18f8ad9c5', 'client', now(), '{bcrypt}$2a$10$T2Z9XX60zjBS0pwXZmqe1.uEf6OJiPEUhGKZg5b0SnZPwtvlxESJ2', NULL, '商城管理客户端', 'client_secret_basic', 'refresh_token,client_credentials,password,captcha,authorization_code', 'http://127.0.0.1:8080/authorized', 'http://127.0.0.1:8080/logged-out', 'openid,profile', '{\"@class\":\"java.util.Collections$UnmodifiableMap\",\"settings.client.require-proof-key\":false,\"settings.client.require-authorization-consent\":true}', '{\"@class\":\"java.util.Collections$UnmodifiableMap\",\"settings.token.reuse-refresh-tokens\":true,\"settings.token.id-token-signature-algorithm\":[\"org.springframework.security.oauth2.jose.jws.SignatureAlgorithm\",\"RS256\"],\"settings.token.access-token-time-to-live\":[\"java.time.Duration\",86400.000000000],\"settings.token.access-token-format\":{\"@class\":\"org.springframework.security.oauth2.server.authorization.settings.OAuth2TokenFormat\",\"value\":\"self-contained\"},\"settings.token.refresh-token-time-to-live\":[\"java.time.Duration\",3600.000000000],\"settings.token.authorization-code-time-to-live\":[\"java.time.Duration\",300.000000000],\"settings.token.device-code-time-to-live\":[\"java.time.Duration\",300.000000000]}');
......@@ -5,7 +5,7 @@
<parent>
<artifactId>mall-oms</artifactId>
<groupId>com.youlai</groupId>
<version>3.1.0</version>
<version>3.2.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
......
FROM openjdk:8-jdk-alpine
# 基础镜像
FROM openjdk:17-jdk-alpine
# 维护者信息
MAINTAINER youlai <youlaitech@163.com>
RUN echo "https://mirrors.ustc.edu.cn/alpine/v3.7/main/" > /etc/apk/repositories && \
apk --no-cache add tzdata && \
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
echo "Asia/Shanghai" > /etc/timezone
# /tmp 目录作为容器数据卷目录,SpringBoot内嵌Tomcat容器默认使用/tmp作为工作目录,任何向 /tmp 中写入的信息不会记录进容器存储层
# 在宿主机的/var/lib/docker目录下创建一个临时文件并把它链接到容器中的/tmp目录
VOLUME /tmp
ADD target/oms-boot.jar mall-oms.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/mall-oms.jar"]
EXPOSE 8603
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \&& echo 'Asia/Shanghai' >/etc/timezone
# 复制主机文件至镜像内,复制的目录需放置在 Dockerfile 文件同级目录下
ADD target/oms-boot.jar app.jar
# 容器启动执行命令
CMD java \
-Xms128m \
-Xmx128m \
-Djava.security.egd=file:/dev/./urandom \
-jar /app.jar
# 声明容器提供服务端口
EXPOSE 8803
......@@ -5,7 +5,7 @@
<parent>
<artifactId>mall-oms</artifactId>
<groupId>com.youlai</groupId>
<version>3.1.0</version>
<version>3.2.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
......
......@@ -11,11 +11,11 @@ spring:
nacos:
discovery:
server-addr: http://f.youlai.tech:8848
namespace: prod
namespace: youlai-mall-prod
config:
server-addr: ${spring.cloud.nacos.discovery.server-addr}
file-extension: yaml
namespace: prod
namespace: youlai-mall-prod
shared-configs[0]:
data-id: youlai-common.yaml
refresh: true
......
......@@ -5,7 +5,7 @@
<parent>
<artifactId>youlai-mall</artifactId>
<groupId>com.youlai</groupId>
<version>3.1.0</version>
<version>3.2.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
......
......@@ -5,7 +5,7 @@
<parent>
<artifactId>mall-pms</artifactId>
<groupId>com.youlai</groupId>
<version>3.1.0</version>
<version>3.2.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
......
# 基础镜像
FROM openjdk:8-jre
FROM openjdk:17-jdk-alpine
# 维护者信息
MAINTAINER youlai <youlaitech@163.com>
# 设置容器时区为当前时区
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \&& echo 'Asia/Shanghai' >/etc/timezone
RUN echo "https://mirrors.ustc.edu.cn/alpine/v3.7/main/" > /etc/apk/repositories && \
apk --no-cache add tzdata && \
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
echo "Asia/Shanghai" > /etc/timezone
# /tmp 目录作为容器数据卷目录,SpringBoot内嵌Tomcat容器默认使用/tmp作为工作目录,任何向 /tmp 中写入的信息不会记录进容器存储层,从而保证容器存储层的无状态化
# /tmp 目录作为容器数据卷目录,SpringBoot内嵌Tomcat容器默认使用/tmp作为工作目录,任何向 /tmp 中写入的信息不会记录进容器存储层
# 在宿主机的/var/lib/docker目录下创建一个临时文件并把它链接到容器中的/tmp目录
VOLUME /tmp
......@@ -15,9 +17,13 @@ VOLUME /tmp
ADD target/pms-boot.jar app.jar
# 容器启动执行命令
ENTRYPOINT ["java", "-Xmx128m", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar"]
CMD java \
-Xms128m \
-Xmx128m \
-Djava.security.egd=file:/dev/./urandom \
-jar /app.jar
# 声明运行时容器提供服务端口,仅仅是声明
# 声明容器提供服务端口
EXPOSE 8802
......
......@@ -5,7 +5,7 @@
<parent>
<artifactId>mall-pms</artifactId>
<groupId>com.youlai</groupId>
<version>3.1.0</version>
<version>3.2.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
......@@ -105,7 +105,6 @@
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
</plugin>
</plugins>
</build>
......
......@@ -11,11 +11,11 @@ spring:
nacos:
discovery:
server-addr: http://f.youlai.tech:8848
namespace: prod
namespace: youlai-mall-prod
config:
server-addr: ${spring.cloud.nacos.discovery.server-addr}
file-extension: yaml
namespace: prod
namespace: youlai-mall-prod
# 公共配置
shared-configs[0]:
data-id: youlai-common.yaml
......
......@@ -5,7 +5,7 @@
<parent>
<artifactId>youlai-mall</artifactId>
<groupId>com.youlai</groupId>
<version>3.1.0</version>
<version>3.2.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
......
......@@ -5,7 +5,7 @@
<parent>
<artifactId>youlai-mall</artifactId>
<groupId>com.youlai</groupId>
<version>3.1.0</version>
<version>3.2.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
......
......@@ -5,7 +5,7 @@
<parent>
<artifactId>mall-sms</artifactId>
<groupId>com.youlai</groupId>
<version>3.1.0</version>
<version>3.2.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
......
FROM openjdk:8-jre
MAINTAINER youlai youlaitech@163.com
# 基础镜像
FROM openjdk:17-jdk-alpine
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \&& echo 'Asia/Shanghai' >/etc/timezone
# 维护者信息
MAINTAINER youlai <youlaitech@163.com>
# /tmp 目录作为容器数据卷目录,SpringBoot内嵌Tomcat容器默认使用/tmp作为工作目录,任何向 /tmp 中写入的信息不会记录进容器存储层,从而保证容器存储层的无状态化
RUN echo "https://mirrors.ustc.edu.cn/alpine/v3.7/main/" > /etc/apk/repositories && \
apk --no-cache add tzdata && \
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
echo "Asia/Shanghai" > /etc/timezone
# /tmp 目录作为容器数据卷目录,SpringBoot内嵌Tomcat容器默认使用/tmp作为工作目录,任何向 /tmp 中写入的信息不会记录进容器存储层
# 在宿主机的/var/lib/docker目录下创建一个临时文件并把它链接到容器中的/tmp目录
VOLUME /tmp
# 复制jar到镜像
# 复制主机文件至镜像内,复制的目录需放置在 Dockerfile 文件同级目录下
ADD target/sms-boot.jar app.jar
ENTRYPOINT ["java", "-Xmx128m", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar"]
# 容器启动执行命令
CMD java \
-Xms128m \
-Xmx128m \
-Djava.security.egd=file:/dev/./urandom \
-jar /app.jar
# 声明容器提供服务端口
EXPOSE 8804
......
......@@ -5,7 +5,7 @@
<parent>
<artifactId>mall-sms</artifactId>
<groupId>com.youlai</groupId>
<version>3.1.0</version>
<version>3.2.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
......@@ -96,7 +96,6 @@
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
</plugin>
</plugins>
</build>
......
......@@ -12,12 +12,12 @@ spring:
# 注册中心
discovery:
server-addr: http://f.youlai.tech:8848
namespace: prod
namespace: youlai-mall-prod
# 配置中心
config:
server-addr: ${spring.cloud.nacos.discovery.server-addr}
file-extension: yaml
namespace: prod
namespace: youlai-mall-prod
shared-configs[0]:
data-id: youlai-common.yaml
refresh: true
\ No newline at end of file
......@@ -5,7 +5,7 @@
<parent>
<artifactId>youlai-mall</artifactId>
<groupId>com.youlai</groupId>
<version>3.1.0</version>
<version>3.2.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
......
......@@ -5,7 +5,7 @@
<parent>
<artifactId>mall-ums</artifactId>
<groupId>com.youlai</groupId>
<version>3.1.0</version>
<version>3.2.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
......@@ -32,7 +32,7 @@
<dependency>
<groupId>com.youlai</groupId>
<artifactId>pms-api</artifactId>
<version>3.1.0</version>
<version>3.2.1</version>
<scope>compile</scope>
</dependency>
......
FROM openjdk:8-jre
MAINTAINER youlai youlaitech@163.com
# 基础镜像
FROM openjdk:17-jdk-alpine
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \&& echo 'Asia/Shanghai' >/etc/timezone
# 维护者信息
MAINTAINER youlai <youlaitech@163.com>
RUN echo "https://mirrors.ustc.edu.cn/alpine/v3.7/main/" > /etc/apk/repositories && \
apk --no-cache add tzdata && \
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
echo "Asia/Shanghai" > /etc/timezone
# /tmp 目录作为容器数据卷目录,SpringBoot内嵌Tomcat容器默认使用/tmp作为工作目录,任何向 /tmp 中写入的信息不会记录进容器存储层
# 在宿主机的/var/lib/docker目录下创建一个临时文件并把它链接到容器中的/tmp目录
VOLUME /tmp
ADD target/ums-boot.jar mall-ums.jar
# 复制主机文件至镜像内,复制的目录需放置在 Dockerfile 文件同级目录下
ADD target/ums-boot.jar app.jar
# 容器启动执行命令
CMD java \
-Xms128m \
-Xmx128m \
-Djava.security.egd=file:/dev/./urandom \
-jar /app.jar
# 声明容器提供服务端口
EXPOSE 8801
ENTRYPOINT ["java", "-Xmx128m", "-Djava.security.egd=file:/dev/./urandom","-jar","/mall-ums.jar"]
EXPOSE 8601
......@@ -5,7 +5,7 @@
<parent>
<artifactId>mall-ums</artifactId>
<groupId>com.youlai</groupId>
<version>3.1.0</version>
<version>3.2.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
......@@ -91,7 +91,6 @@
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
</plugin>
</plugins>
</build>
......
......@@ -11,11 +11,11 @@ spring:
nacos:
discovery:
server-addr: http://f.youlai.tech:8848
namespace: prod
namespace: youlai-mall-prod
config:
server-addr: ${spring.cloud.nacos.discovery.server-addr}
file-extension: yaml
namespace: prod
namespace: youlai-mall-prod
shared-configs[0]:
data-id: youlai-common.yaml
refresh: true
......@@ -6,7 +6,7 @@
<groupId>com.youlai</groupId>
<artifactId>youlai-mall</artifactId>
<version>3.1.0</version>
<version>3.2.1</version>
<packaging>pom</packaging>
<modules>
......@@ -26,7 +26,7 @@
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.2</version>
<version>3.2.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
......@@ -35,13 +35,9 @@
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<spring-boot.version>3.2.2</spring-boot.version>
<!-- spring cloud & alibaba -->
<spring-cloud.version>2023.0.0</spring-cloud.version>
<spring-cloud-alibaba.version>2022.0.0.0</spring-cloud-alibaba.version>
<!-- spring authorization server -->
<spring-authorization-server.version>1.2.2</spring-authorization-server.version>
<spring-cloud-alibaba.version>2023.0.0.0-RC1</spring-cloud-alibaba.version>
<!-- 数据库 & ORM -->
<mysql.version>8.0.28</mysql.version>
......@@ -273,12 +269,6 @@
<version>${mapstruct.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-oauth2-authorization-server</artifactId>
<version>${spring-authorization-server.version}</version>
</dependency>
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
......
FROM openjdk:8-jre
FROM openjdk:17-jdk-alpine
MAINTAINER youlai youlaitech@163.com
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \&& echo 'Asia/Shanghai' >/etc/timezone
# 设置国内镜像源(中国科技大学镜像源),修改容器时区(alpine镜像需安装tzdata来设置时区),安装字体库(验证码)
RUN echo "https://mirrors.ustc.edu.cn/alpine/v3.7/main/" > /etc/apk/repositories && \
apk --no-cache add tzdata && \
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
echo "Asia/Shanghai" > /etc/timezone && \
apk --no-cache add ttf-dejavu fontconfig
# /tmp 目录作为容器数据卷目录,SpringBoot内嵌Tomcat容器默认使用/tmp作为工作目录,任何向 /tmp 中写入的信息不会记录进容器存储层,从而保证容器存储层的无状态化
# 在宿主机的/var/lib/docker目录下创建一个临时文件并把它链接到容器中的/tmp目录
......@@ -10,9 +16,14 @@ VOLUME /tmp
# 复制jar到镜像
ADD target/youlai-auth.jar app.jar
ENTRYPOINT ["java", "-Xmx128m", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar"]
# 指定容器启动时执行的命令
CMD java \
-Xms128m \
-Xmx128m \
-Djava.security.egd=file:/dev/./urandom \
-jar /app.jar
EXPOSE 8000
EXPOSE 9000
......@@ -5,7 +5,7 @@
<parent>
<artifactId>youlai-mall</artifactId>
<groupId>com.youlai</groupId>
<version>3.1.0</version>
<version>3.2.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
......@@ -15,8 +15,8 @@
<!-- OAuth2 认证服务器-->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-oauth2-authorization-server</artifactId>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-authorization-server</artifactId>
</dependency>
<!-- OAuth2 客户端(第三方登录 微信、Gitee、Github、QQ)-->
......@@ -107,7 +107,6 @@
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<executions>
<execution>
<goals>
......
......@@ -14,14 +14,14 @@ import com.nimbusds.jose.proc.SecurityContext;
import com.youlai.auth.model.SysUserDetails;
import com.youlai.auth.oauth2.extension.captcha.CaptchaAuthenticationConverter;
import com.youlai.auth.oauth2.extension.captcha.CaptchaAuthenticationProvider;
import com.youlai.auth.oauth2.extension.miniapp.WxMiniAppAuthenticationConverter;
import com.youlai.auth.oauth2.extension.miniapp.WxMiniAppAuthenticationProvider;
import com.youlai.auth.oauth2.extension.miniapp.WxMiniAppAuthenticationToken;
import com.youlai.auth.oauth2.extension.wechat.WechatAuthenticationConverter;
import com.youlai.auth.oauth2.extension.wechat.WechatAuthenticationProvider;
import com.youlai.auth.oauth2.extension.wechat.WechatAuthenticationToken;
import com.youlai.auth.oauth2.extension.password.PasswordAuthenticationConverter;
import com.youlai.auth.oauth2.extension.password.PasswordAuthenticationProvider;
import com.youlai.auth.oauth2.extension.sms.SmsAuthenticationConverter;
import com.youlai.auth.oauth2.extension.sms.SmsAuthenticationProvider;
import com.youlai.auth.oauth2.extension.sms.SmsAuthenticationToken;
import com.youlai.auth.oauth2.extension.smscode.SmsCodeAuthenticationConverter;
import com.youlai.auth.oauth2.extension.smscode.SmsCodeAuthenticationProvider;
import com.youlai.auth.oauth2.extension.smscode.SmsCodeAuthenticationToken;
import com.youlai.auth.oauth2.handler.MyAuthenticationFailureHandler;
import com.youlai.auth.oauth2.handler.MyAuthenticationSuccessHandler;
import com.youlai.auth.oauth2.jackson.SysUserMixin;
......@@ -96,8 +96,6 @@ public class AuthorizationServerConfig {
private final CustomOidcUserInfoService customOidcUserInfoService;
private final OAuth2TokenCustomizer<JwtEncodingContext> jwtCustomizer;
private static final String CUSTOM_CONSENT_PAGE_URI = "/oauth2/consent"; // 自定义授权页
private static final String CUSTOM_LOGIN_PAGE_URI = "/sso-login"; // 自定义登录页
private final StringRedisTemplate redisTemplate;
......@@ -119,8 +117,6 @@ public class AuthorizationServerConfig {
OAuth2AuthorizationServerConfiguration.applyDefaultSecurity(http);
http.getConfigurer(OAuth2AuthorizationServerConfigurer.class)
.authorizationEndpoint(authorizationEndpoint -> authorizationEndpoint.consentPage(CUSTOM_CONSENT_PAGE_URI)) // 自定义授权页
// 自定义授权模式转换器(Converter)
.tokenEndpoint(tokenEndpoint -> tokenEndpoint
.accessTokenRequestConverters(
......@@ -130,8 +126,8 @@ public class AuthorizationServerConfig {
List.of(
new PasswordAuthenticationConverter(),
new CaptchaAuthenticationConverter(),
new WxMiniAppAuthenticationConverter(),
new SmsAuthenticationConverter()
new WechatAuthenticationConverter(),
new SmsCodeAuthenticationConverter()
)
)
)
......@@ -142,8 +138,8 @@ public class AuthorizationServerConfig {
List.of(
new PasswordAuthenticationProvider(authenticationManager, authorizationService, tokenGenerator),
new CaptchaAuthenticationProvider(authenticationManager, authorizationService, tokenGenerator, redisTemplate, codeGenerator),
new WxMiniAppAuthenticationProvider(authorizationService, tokenGenerator, memberDetailsService, wxMaService),
new SmsAuthenticationProvider(authorizationService, tokenGenerator, memberDetailsService, redisTemplate)
new WechatAuthenticationProvider(authorizationService, tokenGenerator, memberDetailsService, wxMaService),
new SmsCodeAuthenticationProvider(authorizationService, tokenGenerator, memberDetailsService, redisTemplate)
)
)
)
......@@ -161,17 +157,14 @@ public class AuthorizationServerConfig {
);
http
// 当用户未登录且尝试访问需要认证的端点时,重定向至登录页面
.exceptionHandling((exceptions) -> exceptions
.defaultAuthenticationEntryPointFor(
new LoginUrlAuthenticationEntryPoint(CUSTOM_LOGIN_PAGE_URI),
new LoginUrlAuthenticationEntryPoint("/login"),
new MediaTypeRequestMatcher(MediaType.TEXT_HTML)
)
)
// Accept access tokens for User Info and/or Client Registration
.oauth2ResourceServer(oauth2ResourceServer ->
oauth2ResourceServer.jwt(Customizer.withDefaults()));
return http.build();
}
......@@ -374,8 +367,8 @@ public class AuthorizationServerConfig {
.authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE)
.authorizationGrantType(AuthorizationGrantType.REFRESH_TOKEN)
.authorizationGrantType(AuthorizationGrantType.CLIENT_CREDENTIALS)
.authorizationGrantType(WxMiniAppAuthenticationToken.WECHAT_MINI_APP) // 微信小程序模式
.authorizationGrantType(SmsAuthenticationToken.SMS_CODE) // 短信验证码模式
.authorizationGrantType(WechatAuthenticationToken.WECHAT_MINI_APP) // 微信小程序模式
.authorizationGrantType(SmsCodeAuthenticationToken.SMS_CODE) // 短信验证码模式
.redirectUri("http://127.0.0.1:8080/authorized")
.postLogoutRedirectUri("http://127.0.0.1:8080/logged-out")
.scope(OidcScopes.OPENID)
......
package com.youlai.auth.oauth2.extension.sms;
package com.youlai.auth.oauth2.extension.smscode;
import cn.hutool.core.util.StrUtil;
import com.youlai.auth.util.OAuth2EndpointUtils;
......@@ -26,13 +26,13 @@ import java.util.stream.Collectors;
* @see org.springframework.security.oauth2.server.authorization.web.authentication.OAuth2AuthorizationCodeAuthenticationConverter
* @since 3.0.0
*/
public class SmsAuthenticationConverter implements AuthenticationConverter {
public class SmsCodeAuthenticationConverter implements AuthenticationConverter {
@Override
public Authentication convert(HttpServletRequest request) {
// 授权类型 (必需)
String grantType = request.getParameter(OAuth2ParameterNames.GRANT_TYPE);
if (!SmsAuthenticationToken.SMS_CODE.getValue().equals(grantType)) {
if (!SmsCodeAuthenticationToken.SMS_CODE.getValue().equals(grantType)) {
return null;
}
......@@ -57,20 +57,20 @@ public class SmsAuthenticationConverter implements AuthenticationConverter {
}
// 手机号(必需)
String mobile = parameters.getFirst(SmsParameterNames.MOBILE);
String mobile = parameters.getFirst(SmsCodeParameterNames.MOBILE);
if (StrUtil.isBlank(mobile)) {
OAuth2EndpointUtils.throwError(
OAuth2ErrorCodes.INVALID_REQUEST,
SmsParameterNames.MOBILE,
SmsCodeParameterNames.MOBILE,
OAuth2EndpointUtils.ACCESS_TOKEN_REQUEST_ERROR_URI);
}
// 验证码(必需)
String code = parameters.getFirst(SmsParameterNames.CODE);
String code = parameters.getFirst(SmsCodeParameterNames.CODE);
if (StrUtil.isBlank(code)) {
OAuth2EndpointUtils.throwError(
OAuth2ErrorCodes.INVALID_REQUEST,
SmsParameterNames.CODE,
SmsCodeParameterNames.CODE,
OAuth2EndpointUtils.ACCESS_TOKEN_REQUEST_ERROR_URI);
}
......@@ -85,7 +85,7 @@ public class SmsAuthenticationConverter implements AuthenticationConverter {
)
.collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue().get(0)));
return new SmsAuthenticationToken(
return new SmsCodeAuthenticationToken(
clientPrincipal,
requestedScopes,
additionalParameters
......
package com.youlai.auth.oauth2.extension.sms;
package com.youlai.auth.oauth2.extension.smscode;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.StrUtil;
......@@ -34,7 +34,7 @@ import java.util.Map;
* @since 3.0.0
*/
@Slf4j
public class SmsAuthenticationProvider implements AuthenticationProvider {
public class SmsCodeAuthenticationProvider implements AuthenticationProvider {
private static final String ERROR_URI = "https://datatracker.ietf.org/doc/html/rfc6749#section-5.2";
......@@ -52,7 +52,7 @@ public class SmsAuthenticationProvider implements AuthenticationProvider {
* @param tokenGenerator the token generator
* @since 0.2.3
*/
public SmsAuthenticationProvider(
public SmsCodeAuthenticationProvider(
OAuth2AuthorizationService authorizationService,
OAuth2TokenGenerator<? extends OAuth2Token> tokenGenerator,
MemberDetailsService memberDetailsService,
......@@ -72,21 +72,21 @@ public class SmsAuthenticationProvider implements AuthenticationProvider {
@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
SmsAuthenticationToken smsAuthenticationToken = (SmsAuthenticationToken) authentication;
SmsCodeAuthenticationToken smsCodeAuthenticationToken = (SmsCodeAuthenticationToken) authentication;
OAuth2ClientAuthenticationToken clientPrincipal = OAuth2AuthenticationProviderUtils
.getAuthenticatedClientElseThrowInvalidClient(smsAuthenticationToken);
.getAuthenticatedClientElseThrowInvalidClient(smsCodeAuthenticationToken);
RegisteredClient registeredClient = clientPrincipal.getRegisteredClient();
// 验证客户端是否支持授权类型(grant_type=wechat_mini_app)
if (!registeredClient.getAuthorizationGrantTypes().contains(SmsAuthenticationToken.SMS_CODE)) {
if (!registeredClient.getAuthorizationGrantTypes().contains(SmsCodeAuthenticationToken.SMS_CODE)) {
throw new OAuth2AuthenticationException(OAuth2ErrorCodes.UNAUTHORIZED_CLIENT);
}
// 短信验证码校验
Map<String, Object> additionalParameters = smsAuthenticationToken.getAdditionalParameters();
String mobile = (String) additionalParameters.get(SmsParameterNames.MOBILE);
String code = (String) additionalParameters.get(SmsParameterNames.CODE);
Map<String, Object> additionalParameters = smsCodeAuthenticationToken.getAdditionalParameters();
String mobile = (String) additionalParameters.get(SmsCodeParameterNames.MOBILE);
String code = (String) additionalParameters.get(SmsCodeParameterNames.CODE);
if (!code.equals("666666")) { // 666666 是后门,因为短信收费,正式环境删除这个if
String codeKey = RedisConstants.LOGIN_SMS_CODE_PREFIX + mobile;
......@@ -107,8 +107,8 @@ public class SmsAuthenticationProvider implements AuthenticationProvider {
.registeredClient(registeredClient)
.principal(usernamePasswordAuthentication)
.authorizationServerContext(AuthorizationServerContextHolder.getContext())
.authorizationGrantType(SmsAuthenticationToken.SMS_CODE)
.authorizationGrant(smsAuthenticationToken);
.authorizationGrantType(SmsCodeAuthenticationToken.SMS_CODE)
.authorizationGrant(smsCodeAuthenticationToken);
// 生成访问令牌(Access Token)
OAuth2TokenContext tokenContext = tokenContextBuilder.tokenType(OAuth2TokenType.ACCESS_TOKEN).build();
......@@ -124,7 +124,7 @@ public class SmsAuthenticationProvider implements AuthenticationProvider {
generatedAccessToken.getExpiresAt(), tokenContext.getAuthorizedScopes());
OAuth2Authorization.Builder authorizationBuilder = OAuth2Authorization.withRegisteredClient(registeredClient)
.principalName(userDetails.getUsername())
.authorizationGrantType(SmsAuthenticationToken.SMS_CODE)
.authorizationGrantType(SmsCodeAuthenticationToken.SMS_CODE)
.attribute(Principal.class.getName(), usernamePasswordAuthentication);
if (generatedAccessToken instanceof ClaimAccessor) {
authorizationBuilder.token(accessToken, (metadata) ->
......@@ -159,7 +159,7 @@ public class SmsAuthenticationProvider implements AuthenticationProvider {
@Override
public boolean supports(Class<?> authentication) {
return SmsAuthenticationToken.class.isAssignableFrom(authentication);
return SmsCodeAuthenticationToken.class.isAssignableFrom(authentication);
}
}
package com.youlai.auth.oauth2.extension.sms;
package com.youlai.auth.oauth2.extension.smscode;
import jakarta.annotation.Nullable;
import org.springframework.security.core.Authentication;
......@@ -14,10 +14,10 @@ import java.util.Set;
/**
* 短信验证码身份验证令牌
*
* @author haoxr
* @author Ray Hao
* @since 3.0.0
*/
public class SmsAuthenticationToken extends OAuth2AuthorizationGrantAuthenticationToken {
public class SmsCodeAuthenticationToken extends OAuth2AuthorizationGrantAuthenticationToken {
/**
* 令牌申请访问范围
......@@ -27,15 +27,15 @@ public class SmsAuthenticationToken extends OAuth2AuthorizationGrantAuthenticati
/**
* 授权类型(短信验证码: sms_code)
*/
public static final AuthorizationGrantType SMS_CODE = new AuthorizationGrantType("sms");
public static final AuthorizationGrantType SMS_CODE = new AuthorizationGrantType("sms_code");
protected SmsAuthenticationToken(
protected SmsCodeAuthenticationToken(
Authentication clientPrincipal,
Set<String> scopes,
@Nullable Map<String, Object> additionalParameters
) {
super(SmsAuthenticationToken.SMS_CODE, clientPrincipal, additionalParameters);
super(SmsCodeAuthenticationToken.SMS_CODE, clientPrincipal, additionalParameters);
this.scopes = Collections.unmodifiableSet(scopes != null ? new HashSet<>(scopes) : Collections.emptySet());
}
......
......@@ -14,7 +14,7 @@
* limitations under the License.
*/
package com.youlai.auth.oauth2.extension.sms;
package com.youlai.auth.oauth2.extension.smscode;
/**
* 短信验证码模式参数名称常量
......@@ -22,7 +22,7 @@ package com.youlai.auth.oauth2.extension.sms;
* @author haoxr
* @since 3.0.0
*/
public final class SmsParameterNames {
public final class SmsCodeParameterNames {
/**
* 手机号
......@@ -35,7 +35,7 @@ public final class SmsParameterNames {
public static final String CODE = "code";
private SmsParameterNames() {
private SmsCodeParameterNames() {
}
}
package com.youlai.auth.oauth2.extension.miniapp;
package com.youlai.auth.oauth2.extension.wechat;
import cn.hutool.core.util.StrUtil;
import com.youlai.auth.util.OAuth2EndpointUtils;
......@@ -26,7 +26,7 @@ import java.util.stream.Collectors;
* @see org.springframework.security.oauth2.server.authorization.web.authentication.OAuth2AuthorizationCodeAuthenticationConverter
* @since 3.0.0
*/
public class WxMiniAppAuthenticationConverter implements AuthenticationConverter {
public class WechatAuthenticationConverter implements AuthenticationConverter {
public static final String ACCESS_TOKEN_REQUEST_ERROR_URI = "https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/login/auth.code2Session.html";
......@@ -34,7 +34,7 @@ public class WxMiniAppAuthenticationConverter implements AuthenticationConverter
public Authentication convert(HttpServletRequest request) {
// 授权类型 (必需)
String grantType = request.getParameter(OAuth2ParameterNames.GRANT_TYPE);
if (!WxMiniAppAuthenticationToken.WECHAT_MINI_APP.getValue().equals(grantType)) {
if (!WechatAuthenticationToken.WECHAT_MINI_APP.getValue().equals(grantType)) {
return null;
}
......@@ -76,7 +76,7 @@ public class WxMiniAppAuthenticationConverter implements AuthenticationConverter
)
.collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue().get(0)));
return new WxMiniAppAuthenticationToken(
return new WechatAuthenticationToken(
clientPrincipal,
requestedScopes,
additionalParameters
......
package com.youlai.auth.oauth2.extension.miniapp;
package com.youlai.auth.oauth2.extension.wechat;
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
......@@ -35,7 +35,7 @@ import java.util.Map;
* @since 3.0.0
*/
@Slf4j
public class WxMiniAppAuthenticationProvider implements AuthenticationProvider {
public class WechatAuthenticationProvider implements AuthenticationProvider {
private static final String ERROR_URI = "https://datatracker.ietf.org/doc/html/rfc6749#section-5.2";
......@@ -54,7 +54,7 @@ public class WxMiniAppAuthenticationProvider implements AuthenticationProvider {
* @param tokenGenerator the token generator
* @since 0.2.3
*/
public WxMiniAppAuthenticationProvider(
public WechatAuthenticationProvider(
OAuth2AuthorizationService authorizationService,
OAuth2TokenGenerator<? extends OAuth2Token> tokenGenerator,
MemberDetailsService memberDetailsService,
......@@ -74,19 +74,19 @@ public class WxMiniAppAuthenticationProvider implements AuthenticationProvider {
@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
WxMiniAppAuthenticationToken wxMiniAppAuthenticationToken = (WxMiniAppAuthenticationToken) authentication;
WechatAuthenticationToken wechatAuthenticationToken = (WechatAuthenticationToken) authentication;
OAuth2ClientAuthenticationToken clientPrincipal = OAuth2AuthenticationProviderUtils
.getAuthenticatedClientElseThrowInvalidClient(wxMiniAppAuthenticationToken);
.getAuthenticatedClientElseThrowInvalidClient(wechatAuthenticationToken);
RegisteredClient registeredClient = clientPrincipal.getRegisteredClient();
// 验证客户端是否支持授权类型(grant_type=wechat_mini_app)
if (!registeredClient.getAuthorizationGrantTypes().contains(WxMiniAppAuthenticationToken.WECHAT_MINI_APP)) {
if (!registeredClient.getAuthorizationGrantTypes().contains(WechatAuthenticationToken.WECHAT_MINI_APP)) {
throw new OAuth2AuthenticationException(OAuth2ErrorCodes.UNAUTHORIZED_CLIENT);
}
// 微信 code 获取 openid
Map<String, Object> additionalParameters = wxMiniAppAuthenticationToken.getAdditionalParameters();
Map<String, Object> additionalParameters = wechatAuthenticationToken.getAdditionalParameters();
String code = (String) additionalParameters.get(OAuth2ParameterNames.CODE);
WxMaJscode2SessionResult sessionInfo;
try {
......@@ -106,8 +106,8 @@ public class WxMiniAppAuthenticationProvider implements AuthenticationProvider {
.registeredClient(registeredClient)
.principal(usernamePasswordAuthentication)
.authorizationServerContext(AuthorizationServerContextHolder.getContext())
.authorizationGrantType(WxMiniAppAuthenticationToken.WECHAT_MINI_APP)
.authorizationGrant(wxMiniAppAuthenticationToken);
.authorizationGrantType(WechatAuthenticationToken.WECHAT_MINI_APP)
.authorizationGrant(wechatAuthenticationToken);
// 生成访问令牌(Access Token)
OAuth2TokenContext tokenContext = tokenContextBuilder.tokenType(OAuth2TokenType.ACCESS_TOKEN).build();
......@@ -123,7 +123,7 @@ public class WxMiniAppAuthenticationProvider implements AuthenticationProvider {
generatedAccessToken.getExpiresAt(), tokenContext.getAuthorizedScopes());
OAuth2Authorization.Builder authorizationBuilder = OAuth2Authorization.withRegisteredClient(registeredClient)
.principalName(userDetails.getUsername())
.authorizationGrantType(WxMiniAppAuthenticationToken.WECHAT_MINI_APP)
.authorizationGrantType(WechatAuthenticationToken.WECHAT_MINI_APP)
.attribute(Principal.class.getName(), usernamePasswordAuthentication);
if (generatedAccessToken instanceof ClaimAccessor) {
authorizationBuilder.token(accessToken, (metadata) ->
......@@ -157,7 +157,7 @@ public class WxMiniAppAuthenticationProvider implements AuthenticationProvider {
@Override
public boolean supports(Class<?> authentication) {
return WxMiniAppAuthenticationToken.class.isAssignableFrom(authentication);
return WechatAuthenticationToken.class.isAssignableFrom(authentication);
}
}
package com.youlai.auth.oauth2.extension.miniapp;
package com.youlai.auth.oauth2.extension.wechat;
import jakarta.annotation.Nullable;
import org.springframework.security.core.Authentication;
......@@ -18,7 +18,7 @@ import java.util.Set;
* @see OAuth2AuthorizationGrantAuthenticationToken
* @since 3.0.0
*/
public class WxMiniAppAuthenticationToken extends OAuth2AuthorizationGrantAuthenticationToken {
public class WechatAuthenticationToken extends OAuth2AuthorizationGrantAuthenticationToken {
/**
* 令牌申请访问范围
......@@ -28,15 +28,15 @@ public class WxMiniAppAuthenticationToken extends OAuth2AuthorizationGrantAuthen
/**
* 授权类型:微信小程序
*/
public static final AuthorizationGrantType WECHAT_MINI_APP = new AuthorizationGrantType("wx_mini_app");
public static final AuthorizationGrantType WECHAT_MINI_APP = new AuthorizationGrantType("wechat");
protected WxMiniAppAuthenticationToken(
protected WechatAuthenticationToken(
Authentication clientPrincipal,
Set<String> scopes,
@Nullable Map<String, Object> additionalParameters
) {
super(WxMiniAppAuthenticationToken.WECHAT_MINI_APP, clientPrincipal, additionalParameters);
super(WechatAuthenticationToken.WECHAT_MINI_APP, clientPrincipal, additionalParameters);
this.scopes = Collections.unmodifiableSet(scopes != null ? new HashSet<>(scopes) : Collections.emptySet());
}
......
server:
port: 8000
port: 9000
spring:
mvc:
......@@ -10,12 +10,12 @@ spring:
# 注册中心
discovery:
server-addr: http://f.youlai.tech:8848
namespace: prod
namespace: youlai-mall-prod
# 配置中心
config:
server-addr: ${spring.cloud.nacos.discovery.server-addr}
file-extension: yaml
namespace: prod
namespace: youlai-mall-prod
shared-configs[0]:
data-id: youlai-common.yaml
refresh: true
\ No newline at end of file
......@@ -2,14 +2,14 @@
<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>
<artifactId>youlai-common</artifactId>
<groupId>com.youlai</groupId>
<artifactId>youlai-mall</artifactId>
<version>3.1.0</version>
<relativePath>../../pom.xml</relativePath>
<version>3.2.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>common-apidoc</artifactId>
<properties>
......@@ -24,7 +24,6 @@
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
</dependency>
</dependencies>
</project>
\ No newline at end of file
......@@ -5,7 +5,7 @@
<parent>
<artifactId>youlai-common</artifactId>
<groupId>com.youlai</groupId>
<version>3.1.0</version>
<version>3.2.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
......
......@@ -5,7 +5,7 @@
<parent>
<artifactId>youlai-common</artifactId>
<groupId>com.youlai</groupId>
<version>3.1.0</version>
<version>3.2.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
......
......@@ -5,7 +5,7 @@
<parent>
<artifactId>youlai-common</artifactId>
<groupId>com.youlai</groupId>
<version>3.1.0</version>
<version>3.2.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
......
......@@ -5,7 +5,7 @@
<parent>
<artifactId>youlai-common</artifactId>
<groupId>com.youlai</groupId>
<version>3.1.0</version>
<version>3.2.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
......
......@@ -5,7 +5,7 @@
<parent>
<artifactId>youlai-common</artifactId>
<groupId>com.youlai</groupId>
<version>3.1.0</version>
<version>3.2.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
......
......@@ -5,7 +5,7 @@
<parent>
<artifactId>youlai-common</artifactId>
<groupId>com.youlai</groupId>
<version>3.1.0</version>
<version>3.2.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
......
......@@ -5,7 +5,7 @@
<parent>
<artifactId>youlai-common</artifactId>
<groupId>com.youlai</groupId>
<version>3.1.0</version>
<version>3.2.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
......
......@@ -5,7 +5,7 @@
<parent>
<artifactId>youlai-common</artifactId>
<groupId>com.youlai</groupId>
<version>3.1.0</version>
<version>3.2.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
......
......@@ -7,7 +7,7 @@
<parent>
<artifactId>youlai-mall</artifactId>
<groupId>com.youlai</groupId>
<version>3.1.0</version>
<version>3.2.1</version>
</parent>
<artifactId>youlai-common</artifactId>
......
FROM openjdk:8-jre
FROM openjdk:17-jdk-alpine
MAINTAINER youlai youlaitech@163.com
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \&& echo 'Asia/Shanghai' >/etc/timezone
# 设置国内镜像源(中国科技大学镜像源),修改容器时区(alpine镜像需安装tzdata来设置时区)
RUN echo "https://mirrors.ustc.edu.cn/alpine/v3.7/main/" > /etc/apk/repositories && \
apk --no-cache add tzdata && \
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
echo "Asia/Shanghai" > /etc/timezone
# /tmp 目录作为容器数据卷目录,SpringBoot内嵌Tomcat容器默认使用/tmp作为工作目录,任何向 /tmp 中写入的信息不会记录进容器存储层,从而保证容器存储层的无状态化
# 在宿主机的/var/lib/docker目录下创建一个临时文件并把它链接到容器中的/tmp目录
......@@ -11,7 +14,11 @@ VOLUME /tmp
# 复制jar至镜像
ADD target/youlai-gateway.jar app.jar
ENTRYPOINT ["java", "-Xmx128m", "-Djava.security.egd=file:/dev/./urandom","-Dcsp.sentinel.app.type=1", "-jar", "/app.jar"]
CMD java \
-Xms128m \
-Xmx128m \
-Djava.security.egd=file:/dev/./urandom \
-jar /app.jar
EXPOSE 9999
......
......@@ -6,7 +6,7 @@
<parent>
<artifactId>youlai-mall</artifactId>
<groupId>com.youlai</groupId>
<version>3.1.0</version>
<version>3.2.1</version>
</parent>
<artifactId>youlai-gateway</artifactId>
......
......@@ -10,12 +10,11 @@ spring:
nacos:
discovery:
server-addr: http://f.youlai.tech:8848
namespace: prod
namespace: youlai-mall-prod
config:
server-addr: ${spring.cloud.nacos.discovery.server-addr}
file-extension: yaml
namespace: prod
namespace: youlai-mall-prod
shared-configs[0]:
data-id: youlai-common.yaml
namespace: prod
refresh: true
......@@ -5,7 +5,7 @@
<parent>
<artifactId>youlai-mall</artifactId>
<groupId>com.youlai</groupId>
<version>3.1.0</version>
<version>3.2.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
......
......@@ -5,7 +5,7 @@
<parent>
<artifactId>youlai-system</artifactId>
<groupId>com.youlai</groupId>
<version>3.1.0</version>
<version>3.2.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
......
# 基础镜像
FROM openjdk:8-jre
FROM openjdk:17-jdk-alpine
# 维护者信息
MAINTAINER youlai <youlaitech@163.com>
# 设置容器时区为当前时区
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \&& echo 'Asia/Shanghai' >/etc/timezone
RUN echo "https://mirrors.ustc.edu.cn/alpine/v3.7/main/" > /etc/apk/repositories && \
apk --no-cache add tzdata && \
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
echo "Asia/Shanghai" > /etc/timezone
# /tmp 目录作为容器数据卷目录,SpringBoot内嵌Tomcat容器默认使用/tmp作为工作目录,任何向 /tmp 中写入的信息不会记录进容器存储层
# 在宿主机的/var/lib/docker目录下创建一个临时文件并把它链接到容器中的/tmp目录
......@@ -15,7 +17,11 @@ VOLUME /tmp
ADD target/system-boot.jar app.jar
# 容器启动执行命令
ENTRYPOINT ["java", "-Xmx128m", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar"]
CMD java \
-Xms128m \
-Xmx128m \
-Djava.security.egd=file:/dev/./urandom \
-jar /app.jar
# 声明容器提供服务端口
EXPOSE 8800
......
......@@ -5,7 +5,7 @@
<parent>
<artifactId>youlai-system</artifactId>
<groupId>com.youlai</groupId>
<version>3.1.0</version>
<version>3.2.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
......@@ -125,7 +125,6 @@
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
</plugin>
</plugins>
</build>
......
......@@ -11,13 +11,12 @@ spring:
nacos:
discovery:
server-addr: http://f.youlai.tech:8848
namespace: prod
namespace: youlai-mall-prod
config:
server-addr: ${spring.cloud.nacos.discovery.server-addr}
file-extension: yaml
namespace: prod
namespace: youlai-mall-prod
shared-configs[0]:
data-id: youlai-common.yaml
namespace: prod
refresh: true