diff --git a/pom.xml b/pom.xml
index d385a47..b482ee3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -118,6 +118,11 @@
spring-security-test
test
+
+ com.alibaba
+ fastjson
+ 1.2.83
+
diff --git a/src/main/java/com/example/admin_server/config/SecurityConfig.java b/src/main/java/com/example/admin_server/config/SecurityConfig.java
index 6068a2f..5f01e7b 100644
--- a/src/main/java/com/example/admin_server/config/SecurityConfig.java
+++ b/src/main/java/com/example/admin_server/config/SecurityConfig.java
@@ -38,7 +38,8 @@ public class SecurityConfig {
"/swagger-ui/**",
"/v3/api-docs/**",
"/api/public/**",
- "/api/admin/login"
+ "/api/admin/login",
+ "/api/client/wx/login"
).permitAll()
.antMatchers("/api/admin/**").authenticated()
.antMatchers("/api/client/**").authenticated()
diff --git a/src/main/java/com/example/admin_server/config/WxConfig.java b/src/main/java/com/example/admin_server/config/WxConfig.java
new file mode 100644
index 0000000..4afb85a
--- /dev/null
+++ b/src/main/java/com/example/admin_server/config/WxConfig.java
@@ -0,0 +1,15 @@
+package com.example.admin_server.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+@ConfigurationProperties(prefix = "wx")
+@Data
+public class WxConfig {
+ private String appid;
+ private String secret;
+ private String jscode2sessionUrl;
+}
+
diff --git a/src/main/java/com/example/admin_server/controller/client/WxLoginController.java b/src/main/java/com/example/admin_server/controller/client/WxLoginController.java
new file mode 100644
index 0000000..ee2add5
--- /dev/null
+++ b/src/main/java/com/example/admin_server/controller/client/WxLoginController.java
@@ -0,0 +1,64 @@
+package com.example.admin_server.controller.client;
+
+import com.alibaba.fastjson.JSONObject;
+import com.example.admin_server.common.Result;
+import com.example.admin_server.config.WxConfig;
+import com.example.admin_server.model.dto.WxLoginDTO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.client.RestTemplate;
+
+import java.util.HashMap;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/api/client/wx")
+@RequiredArgsConstructor
+@Api(tags = {"微信登录"})
+public class WxLoginController {
+
+ private final WxConfig wxConfig;
+
+ @PostMapping("/login")
+ @ApiOperation(value = "微信登录")
+ public Result> wxLogin(@RequestBody WxLoginDTO request) {
+ String code = request.getCode();
+ if (code == null || code.isEmpty()) {
+ return Result.fail("code 参数不能为空");
+ }
+
+ // 构造请求微信的 URL
+ String url = wxConfig.getJscode2sessionUrl()
+ + "?appid=" + wxConfig.getAppid()
+ + "&secret=" + wxConfig.getSecret()
+ + "&js_code=" + code
+ + "&grant_type=authorization_code";
+
+ // 请求微信服务器
+ RestTemplate restTemplate = new RestTemplate();
+ String response = restTemplate.getForObject(url, String.class);
+
+ // 解析微信响应
+ JSONObject jsonObject = JSONObject.parseObject(response);
+ String openid = jsonObject.getString("openid");
+ String sessionKey = jsonObject.getString("session_key");
+
+ if (openid == null) {
+ String errMsg = jsonObject.getString("errmsg");
+ return Result.fail("微信登录失败: " + errMsg);
+ }
+
+ // TODO: 你可以在这里用 openid 查数据库,创建或更新用户,生成 JWT 等
+
+ Map resultData = new HashMap<>();
+ resultData.put("openid", openid);
+ resultData.put("token", "mock-token-" + openid); // 后期你可以用 JWT 替换这里
+
+ return Result.ok("登录成功", resultData);
+ }
+}
diff --git a/src/main/java/com/example/admin_server/filter/JwtAuthenticationFilter.java b/src/main/java/com/example/admin_server/filter/JwtAuthenticationFilter.java
index 95c6a8b..3379460 100644
--- a/src/main/java/com/example/admin_server/filter/JwtAuthenticationFilter.java
+++ b/src/main/java/com/example/admin_server/filter/JwtAuthenticationFilter.java
@@ -29,6 +29,7 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter {
WHITELIST.add("/api/admin/login");
WHITELIST.add("/api/client/login");
WHITELIST.add("/api/employee/login");
+ WHITELIST.add("/api/client/wx/login");
// 也可以放其它公开接口
}
diff --git a/src/main/java/com/example/admin_server/model/dto/WxLoginDTO.java b/src/main/java/com/example/admin_server/model/dto/WxLoginDTO.java
new file mode 100644
index 0000000..83a8d7f
--- /dev/null
+++ b/src/main/java/com/example/admin_server/model/dto/WxLoginDTO.java
@@ -0,0 +1,12 @@
+package com.example.admin_server.model.dto;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+@Data
+public class WxLoginDTO {
+
+ @NotBlank
+ private String code;
+}
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index 58bf9eb..5c31755 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -21,27 +21,11 @@ app:
jwt:
secret: 's9TfkPeAKJOlDw4ox3r6VhAMG7KfI0RK'
expiration: 86400000
-
-springdoc:
- swagger-ui:
- path: /swagger-ui.html
- tags-sorter: alpha
- operations-sorter: alpha
- api-docs:
- path: /v3/api-docs
- group-configs:
- - group: '管理端'
- paths-to-match: '/api/admin/**'
- packages-to-scan: com.example.admin_server.controller.admin
- - group: '客户端'
- paths-to-match: '/api/client/**'
- packages-to-scan: com.example.admin_server.controller.client
- - group: '员工端'
- paths-to-match: '/api/employee/**'
- packages-to-scan: com.example.admin_server.controller.employee
+wx:
+ appid: wxf204145820676bb2
+ secret: 642108612e162db4edb9cf01d7f6d474
+ jscode2session-url: https://api.weixin.qq.com/sns/jscode2session
knife4j:
enable: true
- setting:
- language: zh_cn
diff --git a/src/main/resources/application-prop.yml b/src/main/resources/application-prop.yml
index 7772ee4..b210cf3 100644
--- a/src/main/resources/application-prop.yml
+++ b/src/main/resources/application-prop.yml
@@ -21,27 +21,11 @@ app:
jwt:
secret: '2n9g8b5TfsYLBZGFwE5ImpeQH5u0djEl'
expiration: 86400000
-
-springdoc:
- swagger-ui:
- path: /swagger-ui.html
- tags-sorter: alpha
- operations-sorter: alpha
- api-docs:
- path: /v3/api-docs
- group-configs:
- - group: '管理端'
- paths-to-match: '/api/admin/**'
- packages-to-scan: com.example.admin_server.controller.admin
- - group: '客户端'
- paths-to-match: '/api/client/**'
- packages-to-scan: com.example.admin_server.controller.client
- - group: '员工端'
- paths-to-match: '/api/employee/**'
- packages-to-scan: com.example.admin_server.controller.employee
+ wx:
+ appid: your_app_id
+ secret: your_app_secret
+ jscode2session-url: https://api.weixin.qq.com/sns/jscode2session
knife4j:
enable: true
- setting:
- language: zh_cn
diff --git a/src/main/resources/application-test.yml b/src/main/resources/application-test.yml
index 4e6fafa..085a18d 100644
--- a/src/main/resources/application-test.yml
+++ b/src/main/resources/application-test.yml
@@ -21,27 +21,11 @@ app:
jwt:
secret: 'ylZS9cQ40nBvcZxJKu9zCIDt096BpZbm'
expiration: 86400000
-
-springdoc:
- swagger-ui:
- path: /swagger-ui.html
- tags-sorter: alpha
- operations-sorter: alpha
- api-docs:
- path: /v3/api-docs
- group-configs:
- - group: '管理端'
- paths-to-match: '/api/admin/**'
- packages-to-scan: com.example.admin_server.controller.admin
- - group: '客户端'
- paths-to-match: '/api/client/**'
- packages-to-scan: com.example.admin_server.controller.client
- - group: '员工端'
- paths-to-match: '/api/employee/**'
- packages-to-scan: com.example.admin_server.controller.employee
+ wx:
+ appid: your_app_id
+ secret: your_app_secret
+ jscode2session-url: https://api.weixin.qq.com/sns/jscode2session
knife4j:
enable: true
- setting:
- language: zh_cn
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 07b0308..f1548ac 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -13,7 +13,7 @@ spring:
time-zone: GMT+8
# 指定当前激活环境
profiles:
- active: test
+ active: dev
datasource:
url: jdbc:mysql://localhost:3306/admin_server?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
username: admin_server
@@ -24,28 +24,12 @@ app:
jwt:
secret: 'mwsK9Ol9Ni2IyTvcdgFDVBxatw8QWx2o'
expiration: 86400000
+ wx:
+ appid: your_app_id
+ secret: your_app_secret
+ jscode2session-url: https://api.weixin.qq.com/sns/jscode2session
-springdoc:
- swagger-ui:
- path: /swagger-ui.html
- tags-sorter: alpha
- operations-sorter: alpha
- api-docs:
- path: /v3/api-docs
- group-configs:
- - group: '管理端'
- paths-to-match: '/api/admin/**'
- packages-to-scan: com.example.admin_server.controller.admin
- - group: '客户端'
- paths-to-match: '/api/client/**'
- packages-to-scan: com.example.admin_server.controller.client
- - group: '员工端'
- paths-to-match: '/api/employee/**'
- packages-to-scan: com.example.admin_server.controller.employee
-
knife4j:
enable: true
- setting:
- language: zh_cn